如何用Matlab比较文本框中的字符串

vmdwslir  于 6个月前  发布在  Matlab
关注(0)|答案(2)|浏览(105)

我想比较石头剪刀布游戏文本框中的字符串。比较后,在另一个文本框中显示结果。但它不比较。有人能帮我吗?

if strcmp('Rock'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))
    set(handles.result,'string','Draw');
elseif strcmp('Rock'==get(handles.computer,'string'),'Paper'==get(handles.player,'string'))
    set(handles.result,'string','Player wins');
elseif strcmp('Rock'==get(handles.computer,'string'),'Scissors'==get(handles.player,'string'))
    set(handles.result,'string','Computer wins');
elseif strcmp('Paper'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))
    set(handles.result,'string','Computer wins');
elseif strcmp('Paper'==get(handles.computer,'string'),'Paper'==get(handles.player,'string'))
    set(handles.result,'string','Draw');
elseif strcmp('Paper'==get(handles.computer,'string'),'Scissors'==get(handles.player,'string'))
    set(handles.result,'string','Player wins');
elseif strcmp('Scissors'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))
    set(handles.result,'string','Player wins');
elseif strcmp('Scissors'==get(handles.computer,'string'),'Paper'==get(handles.player,'string'))
    set(handles.result,'string','Computer wins');
elseif strcmp('Scissors'==get(handles.computer,'string'),'Scissors'==get(handles.player,'string'))
    set(handles.result,'string','Draw');
end

字符串

0wi1tuuw

0wi1tuuw1#

问题在于比较两个文本框的字符串的方式:

if strcmp('Rock'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))

字符串
在这份声明中:

'Rock'==get(handles.computer,'string')


一个元素一个元素地比较两个字符串的字符。
此比较返回logical类型的数组(如果第一个字符串的第i个字符等于第二个字符串的第i个字符,则返回1,否则返回0
请注意,如果两个字符串的长度不同,您将得到一个错误,如Matrix dimensions must agree.
这同样适用于声明的第二部分:

'Rock'==get(handles.player,'string')


如果 * 计算机 * 和 * 播放器 * 都插入了相同的字符串(例如 Rock),那么您将使用strcmp来比较两个logical数组,并且失败。
cases因此,您必须直接比较字符串。
一个可能的解决方案是使用switch语句:

  • 首先,你得到 * 计算机 * 和 * 播放器 * 字符串
  • 然后将字符串转换为lower caseRockRock 是相同的)
  • 然后你可以连接两个字符串(例如_rock_rock_)
  • switchcases包含不同的组合

一种可能的实现方式可以是:

% Get the Computer string (in lower case)
computer=lower(get(handles.computer,'string'))
% Get the Player string (in lower case)
player=lower(get(handles.player,'string'))
% Concatenate the two string
res=[computer player]
% Check for the different combination
switch(res)
   case 'rockrock'
      set(handles.result,'string','Draw');
   case 'rockpaper'
      set(handles.result,'string','Player wins');
   case 'rockscissor'
      set(handles.result,'string','Computer wins');
   case 'paperrock'
      set(handles.result,'string','Computer wins');
   case 'paperpaper'
      set(handles.result,'string','Draw');
   case 'paperscissor'
      set(handles.result,'string','Player wins');
   case 'scissorrock'
      set(handles.result,'string','Player wins');
   case 'scissorpaper'
      set(handles.result,'string','Computer wins');
   case 'scissorscissor'
      set(handles.result,'string','Draw');
   otherwise
      set(handles.result,'string','Invalid text');
end


的数据
希望这对你有帮助,
卡普拉

b91juud3

b91juud32#

作为@il_raffa的替代方案,我建议分别将rockscissorpaperMap到[1,2,3],然后从player中减去computer的值。
然后你可以很容易地做if, else if, else

if ismember(player - computer, [-1 2]) %This mean player got a 
     'player wins'
elseif ismember(player - computer, [1 -2])
     'computer wins'
else
     'draw'
end

字符串
当只有9个条件时,switch, case可能不是什么大问题,但如果条件的数量更多,这种技术将使工作变得更容易。

相关问题