字计数器代码跳过

时间:2016-12-12 17:06:14

标签: c arrays

我尝试编写一个代码来查找字符串中的特定单词,并将其计入字符串中的位置。 如果字符串中不存在该单词,则应打印该单词未找到。 例如,对于句子“我迟到”,对于“迟到”,结果应为3.

int count=0,i=0,j=0,k;
char word[30];
getchar();
gets(word);
k=strlen(word);
while(arr[i]!='\0'){
    if(arr[i]==word[j]){
        i++;
        j++;
    }
    i++;  
    if(arr[i]==' ') // moves across a word in the string
        count++;    // count a word the index has passed
}
if(j==k)            // if all letters were a match
    printf("The word %s is placed in the %d place." , word , count);
else
    printf("The word %s is not found." , word);
}

问题在于,对于输入的每个句子,都会打印:

  

找不到单词%s。

我认为第一部分因为某种原因而跳过,直接进入word is not found,但即使经过调试,我也无法抓住时机,也不知道它跳过的原因。

1 个答案:

答案 0 :(得分:1)

请注意i++在主循环中出现两次,一次是有条件的,一次是无条件的。它出现两次这一事实意味着当找到匹配的字母时,i会增加两次。您可以通过删除条件i++来实现代码背后的意图。进行此更改并摆脱getchar()(从我的观点来看似乎毫无意义,因为它只丢弃了输入的第一个字母)并将gets替换为不完全使用{ {1}}收益率(已删除的行已注释掉):

fgets

当我运行它并输入#include <stdio.h> #include <string.h> int main(void){ int count=0,i=0,j=0,k; char * arr = "I am late"; char word[30]; //getchar(); fgets(word,30,stdin); strtok(word,"\n"); //trick for stripping off newline of nonempty line k=strlen(word); while(arr[i]!='\0'){ if(arr[i]==word[j]){ //i++; j++; } i++; if(arr[i]==' ') // moves across a word in the string count++; // count a word the index has passed } if(j==k) // if all letters were a match printf("The word %s is placed in the %d place." , word , count); else printf("The word %s is not found." , word); return 0; } 时,我得到了结果:

late

这似乎几乎是你想要的(如果你想要数字3,就会出现一个错误的错误)。但是,不要过早庆祝,因为如果你再次使用输入The word late is placed in the 2 place. 再次运行它,你会得到:

mate

您的代码(一旦修复)确实会测试输入字母的字母是否按The word mate is placed in the 2 place. 顺序显示,但不会检查字母是否显示在彼此旁边。你需要重新思考你的方法。