Online Compiler C

#include<stdio.h> const int M=1000; char N(char c) { if(c>='A'&&c<='Z') { return c=c+32; } return c; } int main() { int count=0; char str[M+1]; int i=0; char ch; while((ch=getchar())!='\n') { str[i]=ch; i++; } str[i]='\0'; int k=0; char first; char last; while(str[k]!='\0') { while(str[k]==' ') k++; first=str[k]; while(str[k]!='\0') { k++; } if(str[k]=='\0') { k--; last=str[k]; } if(N(first)==N(last)) { count++; } } printf("%d",count); return 0; }
这段代码试图统计输入字符串中,每个单词的首字母和尾字母(忽略大小写)相同的单词数量。但代码存在逻辑错误,导致无法正确遍历每个单词。

主要问题在于内层循环的处理方式。代码中第一个while循环找到单词开头后,第二个while循环直接跳到了字符串末尾,而不是只跳过当前单词。这样会导致每次只处理第一个单词,然后循环就结束了。

- 内层循环应该只跳过当前单词的字母,而不是直接跳到字符串结尾。你需要一个条件来区分单词内的字母和单词间的空格。
- 当内层循环遇到空格或字符串结尾时,应该停下来,此时才能正确获取单词的最后一个字母。注意在获取最后一个字母前,需要回退一个位置。