# Very simple question about strings

1 view (last 30 days)
Sameer on 1 Aug 2014
Edited: Stephen23 on 27 May 2015
Hello all
I have a cell containing stings something like this:
A={'SI1','SI12','SI13','SI2'};
I have to arrange these strings either in ascending order or in descending based on the numbers they are having. Can anyone please guide?
Regards
Stephen23 on 27 May 2015
Edited: Stephen23 on 27 May 2015
You can simply use my FEX submission natsort, which performs a natural order sort on a cell array of strings:
>> A = {'SI1','SI12','SI13','SI2'};
>> natsort(A)
ans =
'SI1' 'SI2' 'SI12' 'SI13'

David Young on 1 Aug 2014
"According to the numbers" is ambiguous.
This sorts the strings in ascending order, making the digit in position 3 more significant than the digit in position 4, etc.:
Asorted = sort(A);
This, on the other hand, makes the last digit the least significant, regardless of how many digits there are. It assumes that there are always 2 characters to ignore at the start:
nums = cellfun(@(s) str2double(s(3:end)), A);
[~, indexes] = sort(nums);
Asorted = A(indexes);

Honglei Chen on 1 Aug 2014