필터 지우기
필터 지우기

Strings with changing length and cases

조회 수: 3 (최근 30일)
JP
JP 2013년 6월 19일
Hi, Im trying to make the following code work and it just wont seem to do what I want. NOTE - The string length of my variable is changing so for different cases I want a different interval.
Astr = '123456789'
switch Astr
case strcmp(Astr([2:4,5:7]), '234567' )
x = 5
case strcmp(Astr([3:6,6:8]), '789123' )
x = 6
case strcmp(Astr([1:3,4:6]), '912345' )
x = 7
otherwise
x = 8
end
I think it has to do with the way Im defining the string values, it keeps outputting x = 8 (the otherwise case). Please let me know how to fix thanks!

채택된 답변

Azzi Abdelmalek
Azzi Abdelmalek 2013년 6월 19일
It's more appropriate to use IF statement
Astr = '123456789'
if isequal(Astr([2:4,5:7]), '234567' )
x = 5
elseif isequal(Astr([3:6,6:8]), '789123' )
x = 6
elseif isequal(Astr([1:3,4:6]), '912345' )
x = 7
else
x = 8
end

추가 답변 (2개)

Iain
Iain 2013년 6월 19일
Assuming that you've shown us "everything". Theres a better way:
x = 8 - (Astr(3) == '2') - 2*(Astr(3) == '7') - 3*(Astr(3) == '3');
  댓글 수: 2
JP
JP 2013년 6월 19일
Well I havent shown everything...I was just using this as a simpler example for a more complex code Im working on....
Iain
Iain 2013년 6월 19일
Azzi's solution is correct, but it will be easy to get lost in it, and make logical errors.

댓글을 달려면 로그인하십시오.


Jan
Jan 2013년 6월 19일
This case can never happen:
strcmp(Astr([3:6,6:8]), '789123' )
One string has 7 character with a repeated sixth element, while the other string has 6 characters only without a repetition.

카테고리

Help CenterFile Exchange에서 Characters and Strings에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by