tags:

views:

146

answers:

4

I have a list of string, which is most likely, but not guaranteed to contain a list of numerics, i.e.,

{"1", "6", "2", "21", "89"}

What is the way to sort the string list so that it will always appear in ascending order?

I can't parse the string to numeric first before doing the sorting simply because the string can contain non numeric characters. And I don't want to go through the list and check-cast each component to numerics and do the sorting. Is there already a library existing out there for this purpose?

In the case where we have mix numerics and non-numeric string item, numeric strings always take precedence over the non numeric ones.

A: 

If this is C#, that's what Int32.TryParse() is for.

If this is C++, then std::string::find_first_not_of is a decent bet. Pass it a string containing the ascii chars for the digits 0 to 9 (plus the minus and plus signs?) and if it returns -1 then it is an integer.

David Gladfelter
Nope, he want to be able to sort lists like this one: { a1, a10, a11, a2, a3 } in a natural way: { a1, a2, a3, a10, a11 }. TryParse will obviously not work.
Steven
+4  A: 

This has been asked before slightly differently, but the same answer still applies, as they have a C# implementation on the same site.

SO Question: Sort on a string that may contain a number

Answer provided by ScArcher2: The Alphanum Algorithm

Nick Craver
+1  A: 

You want to sort elements, just like Windows XP Explorer does with files. See this article on how to do this.

Steven
A: 

You may check this article: http://www.codeproject.com/KB/database/AlphanumericSort_SQL.aspx

Ravi