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

问题描述 投票:0回答:2

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

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
matlab strcmp
2个回答
2
投票

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

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')

如果 computerplayer 都插入相同的字符串(例如 Rock),那么您可以使用

strcmp
来比较两个
logical
数组,并且会失败。

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

一个可能的解决方案是使用

switch
语句:

  • 首先你得到计算机播放器字符串
  • 然后将字符串转换为
    lower case
    Rockrock ... 相同)
  • 然后你可以连接两个字符串(例如_rock_rock_)
  • cases
    switch
    拥有不同的组合

一个可能的实现可能是:

% 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

希望这有帮助,

卡普拉'


0
投票

作为 @il_raffa 的替代方案,我建议分别将

rock
scissor
paper
映射到
[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
可能没什么大不了的,但如果条件数量更多,这样的技术会让工作变得更容易。

© www.soinside.com 2019 - 2024. All rights reserved.