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

有人能告诉我我做错了什么吗?我已经看了好几个小时了,不知道出了什么问题。

最佳答案

将scanf改为get和

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

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

关于c - C-以相同字母开头和结尾的单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40846341/

10-11 15:29