Применение библиотечных функций для работы c символами и символьными рядками - C (СИ)
Формулировка задачи:
В символьной строке вывести предпоследнее слово.
Предложение: Мама мыла раму
Предпоследнее слово: мыла
Решение задачи: «Применение библиотечных функций для работы c символами и символьными рядками»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define DELIM " \t\n"
int main(void) {
char buf[BUFSIZ], * pFirst, * pSecond, * pCurrent;
while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
if ( ! ( pFirst = strtok(buf, DELIM) ) ) {
fprintf(stderr, "String is empty!\n");
continue;
}
if ( ! ( pSecond = strtok(NULL, DELIM) ) ) {
fprintf(stderr, "Only one word in string!\n");
continue;
}
while ( pCurrent = strtok(NULL, DELIM) ) {
pFirst = pSecond;
pSecond = pCurrent;
}
printf("Second word to last: %s\n", pFirst);
}
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с символами и символьными рядками
- Определяем разделитель в виде строки
\t\n - Объявляем переменную buf как массив символов (буфер) с фиксированным размером BUFSIZ
- Объявляем указатель pFirst, pSecond и pCurrent на первый, второй и последующие слова в строке соответственно
- Входим в цикл while, который будет выполняться до тех пор, пока пользователь не введет пустую строку
- Проверяем, что строка не пустая. Если это так, то переходим к следующему шагу, иначе выводим сообщение об ошибке и переходим к следующей итерации цикла
- Используя функцию strtok, разделяем входную строку на слова и сохраняем первое слово в переменной pFirst
- Проверяем, что второе слово не пустое. Если это так, то переходим к следующему шагу, иначе выводим сообщение об ошибке и переходим к следующей итерации цикла
- Используя цикл while, разделяем оставшиеся слова в строке и сохраняем их в переменной pCurrent
- Обновляем значения pFirst и pSecond, чтобы они указывали на предыдущее и текущее слова соответственно
- Повторяем шаг 9 до тех пор, пока не будут использованы все слова в строке
- Выводим второе последнее слово на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась