Удалить первое слово и все такие же слова в строке - C (СИ)
Формулировка задачи:
Используя командную строку ввести строку. Удалить первое слово и все такие же слова. Слова разделены одним пробелом, строка начинается и заканчивается символом отличным от пробела.
Помогите пожалуйста, экзаменационная задача, а я вообще не представляю как это реализовать...
Решение задачи: «Удалить первое слово и все такие же слова в строке»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define DELIM " \t\n"
int main(void) {
char buf[BUFSIZ], * first, * current;
while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' && printf("Result: ") ) {
if ( ! ( first = strtok(buf, DELIM) ) ) {
printf("Empty string!\n");
continue;
}
while ( current = strtok(NULL, DELIM) )
if ( strcmp(first, current) )
printf("%s ", current);
printf("\n");
}
return 0;
}
Объяснение кода листинга программы
В этом коде используется стандартная библиотека языка C, функции которой предназначены для работы со строками и вводом-выводом.
- #include
Включает в себя функции для ввода-вывода. - #include
Включает в себя функции для работы со строками. - #define DELIM
\t\nОпределяет разделитель, который разделяет слова в строке. В данном случае это пробел, табуляция и перевод строки. - int main(void) Функция main() является точкой входа в программу.
- char buf[BUFSIZ], first, current; Объявляет переменные buf, first и current.
- buf - буфер для хранения строки, которую вводит пользователь.
- first - указатель на первое слово в строке.
- current - указатель на текущее слово в строке.
- *while ( printf(
String:) && fgets(buf, BUFSIZ, stdin) && buf != '\n' && printf(Result:) )** Организует цикл, который будет выполняться до тех пор, пока пользователь не введет пустую строку. - if ( ! ( first = strtok(buf, DELIM) ) ) Проверяет, есть ли в строке первое слово. Если его нет, выводит сообщение об ошибке и продолжает цикл.
- while ( current = strtok(NULL, DELIM) ) Организует внутренний цикл, который будет выполняться до тех пор, пока не будут обработаны все слова в строке.
- if ( strcmp(first, current) ) Сравнивает текущее слово с первым словом. Если они различаются, выводит текущее слово.
- printf(
\n); Выводит перевод строки после вывода всех слов. - return 0; Завершает работу программы. В результате выполнения программы на экран будет выведена строка, в которой удалены все вхождения первого слова.