Вывести последнее слово введенной строки - C (СИ)
Формулировка задачи:
Ввести строку. Вывести последнее слово введенной строки.
Есть программа, которая выводит первое слово. Что в ней нужно изменить, чтобы выводилось последнее?
#include <stdio.h>
void main ()
{
char s[40];
int j;
printf ("input string: ");
gets (s);
j=0;
while (s[j]!= ' ' && s[j]!='\0')
{
putchar(s[j++]);
}
getchar ();
getchar ();
}Решение задачи: «Вывести последнее слово введенной строки»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void main ()
{
char s[40];
char str[40];
int counter = 0;
int j;
printf ("input string: ");
gets (s);
j=0;
for(int i = strlen(s)-1; i>=0; i--) {
if(ispunct(unsigned char(s[i])) != NULL || isspace(unsigned char(s[i])) != NULL) {
str[counter] = '\0';
break;
}
else {
str[counter] = s[i];
counter++;
}
}
printf("%s\n", strrev(str));
getchar ();
}
Объяснение кода листинга программы
Вывод последнего слова введенной строки
- Включаем необходимые заголовочные файлы:
stdio.hдля работы с функциями ввода-выводаctype.hдля работы с функциями проверки символов на буквы, цифры, знаки препинания и пробелыstring.hдля работы с функциейstrlen,strcpyиstrrev
- Создаем переменные:
char s[40]для хранения введенной строкиchar str[40]для хранения отфильтрованной строкиint counter = 0для подсчета количества символов в отфильтрованной строкеint j = 0для хранения индекса последнего символа в отфильтрованной строке
- Запрашиваем ввод строки:
printf (input string:);gets (s);
- Начинаем цикл:
j=0;for(int i = strlen(s)-1; i>=0; i--)if(ispunct(unsigned char(s[i])) != NULL || isspace(unsigned char(s[i])) != NULL)str[counter] = '\0';break;elsestr[counter] = s[i];counter++;
- Выводим отфильтрованную строку в обратном порядке:
printf(%s\n, strrev(str));
- Получаем символ ввода:
getchar();Обратите внимание, что в коде есть потенциальная уязвимость буферной переполненией, поскольку функцияgetsзаписывает ввод пользователя в буфер без проверки его размера.