Напечатать все слова последовательности, отличные от последнего слова, предварительно преобразовав по правилу - C (СИ)
Формулировка задачи:
последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 строчных русских букв; между соседними словами - запятая, за последним словом - точка. Напечатать все слова последовательности, которые отличны от последнего слова, предварительно преобразовав каждое из них по следующему правилу: удалить из слова первую букву.
Решение задачи: «Напечатать все слова последовательности, отличные от последнего слова, предварительно преобразовав по правилу»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 30
int main()
{
char* words[MAX];
int wordsCount = 0;
char buffstr[MAX] = {0};
char ch[2] = " ";
while (1)
{
ch[0] = getche();
if (ch[0] == ',' || ch[0] == '.')
{
words[wordsCount] = (char*)malloc((strlen(buffstr) + 1)*sizeof(char));
strcpy(words[wordsCount++], buffstr);
strcpy(buffstr, "");
}
else strcat(buffstr, ch);
if (ch[0] == '.') break;
}
printf("\n");
for (int i = 0; i < wordsCount - 1; i++)
if (strcmp(words[i], words[wordsCount - 1]))
{
words[i]++;
printf("%s\n", words[i]);
}
return 0;
}
Объяснение кода листинга программы
- Объявлены массив строк
wordsтипаchar*и переменнаяwordsCountдля подсчета количества заполненных элементов массива. - В цикле
whileсчитываются символы по одному. - Если считанный символ является запятой или точкой, то это означает конец текущего слова, поэтому его добавляют в массив
wordsи обнуляют буферbuffstr. - В каждой итерации цикла
whileк буферуbuffstrдобавляется очередной считанный символ. - Если считанный символ является точкой, то это означает конец ввода, и цикл прерывается.
- В конце программы выводится каждое слово, которое не является последним, с помощью цикла
for. - В каждой итерации цикла
forпроверяется, является ли текущее слово последним. - Если текущее слово не является последним, то к нему добавляется
1и выводится на экран.