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 шт):
Напрашивается очевидный вариант: разверните строку (сделайте ее посимвольно наоборот), выведите первое слово, которое у Вас отлично получается, затем еще раз инвертируйте это слово :-).
А если серьезно, то Вы и просите в программе вывести именно первое слово. Если к Вашему коду применять минимум изменений... Я бы предложил просто просматривать предложение с конца строки, а не с начала. Так гораздо быстрее получится найти искомое слово.
Для нормальной работы добавил пару заголовочных файлов, один за ненадобностью удалил. В итоге, получилось как-то так:
#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() можете уже начать забывать - её, вроде как, должны удалить из стандарта языка Си (если еще не удалили).