C - 以相同字母开头和结尾的单词

时间:2016-11-28 14:11:37

标签: c string strtok

我最近开始学习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;
}

有人可以向我解释我做错了什么吗?我已经看了几个小时,我不知道是什么问题。

1 个答案:

答案 0 :(得分:0)

将scanf更改为获取和

f(token[0] == token[strlen(token)-1]

scanf将白色空格视为所提供输入的结尾。您还可以使用scanf下的说明符%[^ \ n],它基本上告诉scanf扫描输入,直到“\ n”出现。
%[^ \ n]的缺点是,如果你试图多次运行程序,它将无法工作,因为,scanf从stdin获取其输入。因为stdin中的最后一个字符将是最后一个“\ n”或者输入你提供的,它基本上会继续跳过,下一个输入,使得gets()成为更好的选择。