C последнее слово в предложении

Надо вывести последнее слово в предложении, но в моей реализации выводится первое. Как это исправить? Буду благодарен за помощь

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

int main()
{   
    char text[500];
    
    int lenght;
    bool tf = false;
    printf("ведите предложени€ через .\n");
    gets(text);
    // putchar(text[1]);
    lenght = strlen(text);
    int c;
    for (int i = 0; i < lenght; i++) {
        putchar(text[i]);
        if(isspace(text[i])){
           c = i+1;
           break;
       }
    }
    // printf("%d", c);
    for (c ; c < lenght; c++) {
       
        if(text[c] == '.') {
            c += 2;
            tf = true;
            
        }    
        if(tf && !(isspace(text[c]))){
            putchar(text[c]);
        }
        else {
            tf = false;
        }
        
    }
    return 0;
}


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

Автор решения: Vladimir

Напрашивается очевидный вариант: разверните строку (сделайте ее посимвольно наоборот), выведите первое слово, которое у Вас отлично получается, затем еще раз инвертируйте это слово :-).

А если серьезно, то Вы и просите в программе вывести именно первое слово. Если к Вашему коду применять минимум изменений... Я бы предложил просто просматривать предложение с конца строки, а не с начала. Так гораздо быстрее получится найти искомое слово.

Для нормальной работы добавил пару заголовочных файлов, один за ненадобностью удалил. В итоге, получилось как-то так:

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

#define TEXT_SIZE_MAX 500

int main()
{   
    char text[TEXT_SIZE_MAX+1];
    
    int lenght;
    printf("Введите предложение через '.'\n");
    fgets(text, TEXT_SIZE_MAX, stdin);
    lenght = strlen(text);
    // просто удаляем все пробельные символы после предложения
    for (int i = lenght-1; isspace(text[i]); i--){ 
        text[i] = 0;
        --lenght;
    }
    int c = 0;
   
    for (int i = lenght-1; i >= 0; i--) {
        if(isspace(text[i])){
           c = i + 1;
           break;
        }
    }
//    printf("%s\n", text + c); // можно вывести слово с точкой
    
    // Здесь удаляем из вывода точку. Хотя ее можно было заменить 0 символом еще при первом проходе по предложению с конца.
    for (int i = c; i < lenght; i++)
        putchar( (text[i] != '.') ? text[i] : '\0');
    
    putchar('\n');
    return 0;
}

Еще я заменил вредную функцию gets() на вполне безобидную fgets(). А про gets() можете уже начать забывать - её, вроде как, должны удалить из стандарта языка Си (если еще не удалили).

→ Ссылка