Steve555 said:
Hi
I'm comparing two strings with strcmp(), but they might be words or
numbers. Is there a convenient way to handle number strings with strcmp
() such that 4 is less than 2300 for example, or do I have to manually
check if they're numbers and handle this case separately each time?
If you want them sorted according to their numerical value, rather
than as strings, then you have to calculate that numerical value. That
means you have to actually determine whether they are numbers.
Do you have any control over the content of those number strings? If
all of your number strings represent positive integers, and if you can
pad the strings with leading '0' characters to all be the same length
(for instance, by using printf("%09u" ...) ), then strcmp() will order
them the same way as their numerical value.
You can also pad with blanks instead of '0' by using the '-' flag
rather than the '0' flag, but this only works if ' ' < '0'. That
happens to be true in every encoding I'm familiar with, but it's not
required by the C standard.
Do the strings sometimes have a mixture of numbers and letters? If so,
you'll have to decide how you want "4C" to sort relative to "20".
There's lots of possible ways of answering that question, and the
appropriate method of dealing with them depends upon the answer.