разделить строку на слова си

Слова разделяются одним или несколькими пробелами и знаками пунктуации (“,”, “;”, “:”, “-”, “.”, “!”, “?”). scanf, sscanf или strtok нельзя. Каким образом это можно сделать?


Ответы (1 шт):

Автор решения: Namous
#include <stdio.h>

int main()
{
    char c;
    char str[80][20]; //допустим, предложение из 80 слов, а слово максимум состоит из 20 букв
    int i = 0, j = 0, num_nw = 0, word = 0;
    while((c = getchar()) != '\n')//пока строка не кончилась, считываем каждый символ
    {
        if(c == ' ' || c == ',' || c == ';' || c == ':' || c == '-' || c == '.' || c == '!' || c == '?')//если встречены разделители
        {
            if(num_nw == 0 && word > 0)
            {
                str[i][j] = '\0';//обозначаем конец слова
                str[i++][j];//теперь мы хотим записывать новое слово
                j = 0;//и желательно в начало выделенной памяти под слово
            }
            num_nw++;//это разделитель, прибавляем 1
        }
        else
        {
            str[i][j++] = c; //записываем слово
            num_nw = 0;//теперь это не разделитель, их число приравниваем нулю
            word++;//прибавляем 1 к числу слов
        }
    }
    str[i][j] = '\0';//обозначаем конец слова
    return 0;
}
→ Ссылка