Filter löschen
Filter löschen

comparing strings in alphabetical order

17 Ansichten (letzte 30 Tage)
Ella Yeo
Ella Yeo am 29 Mai 2019
Beantwortet: Guillaume am 29 Mai 2019
I'm trying to see the which of the input of 2strings(x1,x2) come first alphabetically.(e.g if x1 comes first it will return 1, if x2 comes first it will return -1..)
they need to be in a same length otherwise it doesn't work which is why I did 'MaxLength'.Also I got rid of the blanks in between if it's a sentence.
but I'm trying to compare the ASCII code of each string (a=97) and see which one comes first.
i did this so far but it just won't work.
x1= lower(input('Enter a string: ','s'));
x2= lower(input('Enter a string: ','s'));
x1 = strrep(x1,' ','')
x2 = strrep(x2,' ','')%string replacement
x1_d=double(x1)
x2_d=double(x2)
x1_length=length(x1)
x2_length=length(x2)
maxLength = max([length(x1_d), length(x2_d)])
x1_d(length(x1_d)+1:maxLength) = 0
x2_d(length(x2_d)+1:maxLength) = 0
if x1_d<x1_d
disp('x1 alphabetically procedure x2')
elseif x1_d>x2_d
disp('x2 alpha x1')
else
disp('same')
end
  1 Kommentar
Stephen23
Stephen23 am 29 Mai 2019
Bearbeitet: Stephen23 am 29 Mai 2019
"they need to be in a same length otherwise it doesn't work..."
Because lt operates element-wise. More specifically it follows these rules:
You also need to read the if documentation carefully, to know how it behaves with a non-scalar condition.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Stephen23
Stephen23 am 29 Mai 2019
Simpler and more robust:
S1 = 'banana';
S2 = 'apple';
[~,X] = sort({S1,S2})
Z = diff(X)
  2 Kommentare
Ella Yeo
Ella Yeo am 29 Mai 2019
Thank you,
but what if the user entered the exact same word?
Stephen23
Stephen23 am 29 Mai 2019
Bearbeitet: Stephen23 am 29 Mai 2019
"but what if the user entered the exact same word?"
Z = diff(X) * ~strcmp(S1,S2)
returns 0 if the words are the same, otherwise -1 or +1. Or you could use an if:
if strcmp(S1,S2)
...
else
...
end

Melden Sie sich an, um zu kommentieren.


Guillaume
Guillaume am 29 Mai 2019
Even simpler, use strings instead of char vector. Comparison operators work on the whole string instead of on characters
S1 = "banana"
S2 = "apple"
S1 < S2 %returns false
S2 == S2 %returns true
So with your code:
x1 = lower(input('Enter a string: ','s'));
x2 = lower(input('Enter a string: ','s'));
x1 = string(x1);
x2 = string(x2);
if x1 < x2
disp('x1 is before x2 alphabetically')
elseif x1 == x2
disp('x1 and x2 are identical')
else
disp('x1 is after x2 alphabetically')
end

Kategorien

Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by