Посчитайте, сколько слов в строке текста?(на языке программирования C) - PullRequest
0 голосов
/ 13 мая 2019

ВОПРОС: Что не так с этим примером кода, что отсутствует?

Текущий неверный вывод:

В ""

есть 0 слов

Код Объяснение: Напишите программу, которая читает строку текста и печатает количество слов в этой строке текста.Слово содержит буквенно-цифровые символы.Подсказка: используйте функцию fgets ().

Пример выполнения:

Вход: отсюда в вечность Выход: 4

Ввод: начните здесь и поверните на 180 градусов Ввод: 6

Фрагмент кода: https://onlinegdb.com/H1rBwB83V

#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>

#define MAXLEN 100

int countWords(char str[])
{
    int i=0;
    int count = 0;
    bool flag = false;

    while (str[i] != '\0')
    {
        if (isalnum(str[i]))
        {
            if (!flag)
            {
                count++;
                flag = true;
            }
        }
        else
            flag = false;

        i++;
    }

    return count;
}

int main(int argc, char **argv) {
    char str[MAXLEN];
    int count;

    while (fgets(str, sizeof(str), stdin) != NULL)
    {
        str[strlen(str-1)] = '\0'; // the last character is the newline. replace with null
        count = countWords(str);
        printf("There are %d words in \"%s\"\n", count, str);
    }

    return 0;
}

Аналогичный учебник: https://www.sanfoundry.com/c-program-count-words-in-sentence/

1 Ответ

2 голосов
/ 13 мая 2019

У вас есть ошибка:

str[strlen (str - 1)] = '\0';   // the last character is the newline. replace with null

Использование указателя str - 1 приводит к неопределенному поведению, так как оно указывает на память вне исходной строки.

Вы на самом деле хотели это сделатьэто: strlen(str) - 1 (обратите внимание, что -1 перемещен за скобки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...