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

时间:2017-03-04 15:27:01

标签: matlab strcmp

我想比较摇滚,纸张和剪刀游戏的文本框中的字符串。比较后,将结果显示在另一个文本框中。但它没有比较。有人可以帮帮我吗?谢谢你。

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

2 个答案:

答案 0 :(得分:2)

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

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

在此声明中:

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

你逐个元素地比较两个字符串的字符。

如果第一个字符串的第i个字符等于第二个字符串的第i个字符,则此比较返回类型logical的数组1,否则返回0

请注意,如果两个字符串的长度不同,您将收到错误,例如Matrix dimensions must agree.

同样适用于声明的第二部分:

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

如果计算机播放器都插入相同的字符串(例如 Rock ),那么您正在使用strcmp比较两个logical数组,它失败了。

cases因此,您必须直接比较字符串。

可能的解决方案是使用switch语句:

  • 首先获取计算机播放器字符串
  • 然后你将字符串转换为lower case Rock rock 是......相同的)
  • 然后你可以连接两个字符串(例如_rock_rock _)
  • cases的{​​{1}}拥有不同的组合

可能的实施可能是:

switch

enter image description here

希望这有帮助,

Qapla'

答案 1 :(得分:0)

作为@il_raffa的替代方案,我建议分别将rockscissorpaper映射到[1,2,3]。然后从computer中减去player的值。

然后你可以轻松地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可能不是什么大问题,但如果条件数量较多,这样的技术会使工作更容易。