比较两个NSString用于拼写错误iPhone编程的方法

时间:2014-04-20 22:08:27

标签: objective-c ios7 nsstring nsrange

我正在为类似于Hangman的游戏编写iOS应用程序,不同之处在于玩家需要一次性猜出一个字母的秘密单词,从第一个字母开始。秘密字在游戏开始时在*中显示为星号(UITextField)。

当玩家猜到第一个字母时,程序应该将其与秘密字词进行比较,以查看该字母是否正确。如果猜测正确,应用程序应使用正确的字母替换第一个星号。如果猜测不正确,将采取其他一些措施。玩家一次一个字母地重复这个过程,直到秘密词被完全拼写出来。

以下是我目前使用的代码,用于检查针对密码字的猜测字母,但它无法正常工作。

-(void) checkGameLetter : (NSString *) letterToCheck{
    bool match = NO;
    NSRange gameLetterRange;
    char charToCheck = [letterToCheck characterAtIndex:0];
        for(int i = 0; i < self.correctWord.length; i++)
        {
            char tempString = [self.correctWord characterAtIndex:i];
            if(charToCheck == tempString){
                match = YES;
                gameLetterRange = NSMakeRange(i, 1);//location, length
                Screen.text =[Screen.text stringByReplacingCharactersInRange:gameLetterRange withString:letterToCheck];

        }

}

1 个答案:

答案 0 :(得分:1)

您的代码出现问题的原因是,其中没有任何内容表示我们正在检查的正确字词的字母。

例如,假设这个词是&#34; zork&#34;并且用户猜测&#34; r&#34;。你正试图走过&#34; zork&#34;寻找是否&#34; r&#34;匹配任何字母。但是根据你的规范,如果这是对第一个字母的猜测,我们应该检查第一个字母(&#34; z&#34;)和停止,因为&#34; r&#34;那个位置是错误的。

因此,您想要编写的内容比您拥有的代码简单得多。你不想要这个:

-(void) checkGameLetter : (NSString *) letterToCheck{

你想要这个:

-(void) checkGameLetter:(NSString*)letterToCheck againstPosition:(NSInteger)position {

并且没有循环:你只要看那个位置的字母,看看它们是否相同。

最后请注意这个重要事实:==不会比较两个字符串。它询问它们是否是相同的对象,它们显然不是。你想要isEqualToString: