如何使用strtok()从字符串在点n上打印包含字符c的单词?

时间:2019-05-25 09:51:58

标签: c pointers c-strings

我正在输入字符串str,并希望将其包含输入字符c的所有单词打印在位置n上(因此,如果n = 1,这是第一个字符)。我正在尝试使用strtok()进行此操作,但出现了奇怪的崩溃。有提示吗?

int main()
{
    char str[100]; gets(str);
    while(getchar()!='\n'); ///so that n or c don't scan a newline in them

    int n; scanf("%d",&n);
    char c; scanf("%c",&c);

    char* token = strtok(str, " ");

    while (token != NULL) {
        if(token[n-1]==c){
            printf("%s\n", token);
        }
        token = strtok(NULL, " ");
    }

    return 0;
}

我输入了以下内容:

Hi i like mint
2
i

然后该程序突然崩溃,并显示以下消息:

  

Problem.exe已停止工作...

1 个答案:

答案 0 :(得分:0)

while循环似乎没有必要。另外,我使用了gets()而不是fgets()。我将大多数声明移到了函数的开头。该代码现在可能有效。

#include <stdio.h>
#include <string.h>
int main()
{
    int n; 
    char c, str[100]; 

    fgets(str, 100, stdin);
    scanf("%d %c",&n, &c);

    char* token = strtok(str, " ");

    while (token != NULL) {
        if(token[n-1] == c) {
            printf("%s\n", token);
        }
        token = strtok(NULL, " ");
    }

    return 0;
}

这是我对其进行测试的链接:https://ideone.com/KQkRrG