我最近开始学习C,偶然发现了这个练习。我试图找到所有以相同字母开头和结尾的单词。听起来很容易,但我无法弄清楚如何让我的程序对数组中的每个单词重复操作。
浏览网页后,我决定使用strtok
,将数组分成单词,然后检查每个单词是否以相同的字母开头和结尾。我最终得到了这段代码,但它没有用,但编译器也没有显示任何问题。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main(){
int i;
int found = 0;
char arr[1000];
char *token;
const char s[2] = " ";
printf("Write your line:\n");
scanf("%s", arr);
token = strtok(arr, s);
while(token!=NULL){
if(token[0] == (strlen(token)-1)){
found++;
}
token = strtok(NULL, s);
}
if(found > 0){
printf("Found %d words that start and end with the same letter.\n", found);
}
return 0;
}
有人可以向我解释我做错了什么吗?我已经看了几个小时,我不知道是什么问题。
答案 0 :(得分:0)
将scanf更改为获取和
f(token[0] == token[strlen(token)-1]
scanf将白色空格视为所提供输入的结尾。您还可以使用scanf下的说明符%[^ \ n],它基本上告诉scanf扫描输入,直到“\ n”出现。
%[^ \ n]的缺点是,如果你试图多次运行程序,它将无法工作,因为,scanf从stdin获取其输入。因为stdin中的最后一个字符将是最后一个“\ n”或者输入你提供的,它基本上会继续跳过,下一个输入,使得gets()成为更好的选择。