Разделить предложение на слова и каждому слову присвоить порядковое число - C (СИ)
Формулировка задачи:
как разделить предложение на слова и каждому слову присвоить порядковое число а затем по тому числу слово забрать?
Решение задачи: «Разделить предложение на слова и каждому слову присвоить порядковое число»
textual
Листинг программы
#include <stdio.h>
void rem_word(char *sen, int n);
int main(void)
{
char sentence[81];
int number;
puts("Enter a sentence.");
fgets(sentence, 80, stdin);
printf("Number of words to remove: ");
scanf("%i", &number);
int i, arr[number];
printf("Positions: ");
for (i=0; i<number; ++i)
scanf("%i", &arr[i]);
for (i=number-1; i>=0; i--)
rem_word(sentence, arr[i]);
printf("%s", sentence);
return 0;
}
void rem_word(char *sentence, int number)
{
int i, pos, state;
int beginning=-1, end=-1;
for (i=0, pos=0, state=0 ; sentence[i]; i++) {
if (sentence[i]==' ')
state = 0;
else if (state == 0) {
state = 1;
pos++;
if (beginning>=0 && end==-1)
end = i;
if (pos == number)
beginning = i;
}
}
if (beginning>=0 && end==-1)
end = --i;
if (beginning>=0 && end>beginning) {
end = end - beginning;
i = beginning;
do {
sentence[i] = sentence[i+end];
} while (sentence[i++]);
}
}
Объяснение кода листинга программы
В этом коде:
- Вводится предложение с помощью функции
fgets(). - Затем пользователю предлагается ввести количество слов, которые необходимо удалить.
- После этого программа просит ввести позиции этих слов.
- Используя эти позиции, функция
rem_word()удаляет указанные слова из предложения. - Наконец, измененное предложение выводится с помощью функции
printf().