我尝试编写一个代码来查找字符串中的特定单词,并将其计入字符串中的位置。 如果字符串中不存在该单词,则应打印该单词未找到。 例如,对于句子“我迟到”,对于“迟到”,结果应为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
,但即使经过调试,我也无法抓住时机,也不知道它跳过的原因。
答案 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.
顺序显示,但不会检查字母是否显示在彼此旁边。你需要重新思考你的方法。