Как напечатать слова, содержащие символ c на месте n из строки, используя strtok ()? - PullRequest
0 голосов
/ 25 мая 2019

Я ввожу строку 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 голосов
/ 25 мая 2019

Эта петля 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

...