Удалить из текста все повествовательные предложения - C (СИ)
Формулировка задачи:
Помогите пожалуйста с задачей. Где я ошибся? Я только учусь) Вот текст задачи: Дан текст удалить из него все повествовательные предложения.
Вот то, что я нарешал):
Заранее спасибо) Если можно, не просто дать решение, расписать по возможности, чтобы понять.. )) спс.
#include <stdio.h>
#include <conio.h>
char *udalenie (char str[])
{
int a=0; char mas[100];
for(int i=0; i<=strlen(str); i++)
{
if(str[i]=='!' || str[i]=='?')
{
while(a<i)
{
mas[a]=str[a];
a++;
}
}
else if(str[i]=='.')
{
a=i+1;
}
}
return mas;
}
void main(void)
{
clrscr();
char str[100], mas[100];
gets (str);
udalenie (str);
for(int i=0; i<=strlen(mas); i++)
printf("%c", mas[i]);
getch();
}Решение задачи: «Удалить из текста все повествовательные предложения»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#define MAX 100
void main()
{ char line[MAX]={};
char new_line[MAX]={};
int index=0;
const char* p_line=new_line;
int i,a,b;
a=b=0;
printf("Please input your string:\n");
gets(line);
for(i=0;i<MAX;++i)
{
if(line[i]=='.')
index=i+1;
if(line[i]=='!'||line[i]=='?')
{
for(a=index;a<i+1;++a)
{
new_line[b]=line[a];
++b;
}
index=i+1;
}
}
printf("%s", p_line);
getch();
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы.
- Объявляются переменные:
- line[MAX] - строка, в которую будет вводиться текст.
- new_line[MAX] - новая строка, в которой будут храниться предложения без повествовательных.
- index - индекс, который будет отслеживать текущий символ в строке.
- p_line - указатель на начало строки new_line.
- i, a, b - переменные-счетчики для обработки строки.
- Выводится приглашение для ввода строки.
- С помощью функции gets() вводится строка в переменную line.
- В цикле for перебираются все символы строки.
- Если текущий символ равен '.', то индекс следующего символа после точки записывается в переменную index.
- Если текущий символ равен '!' или '?', то в новую строку new_line начиная с индекса b (который инициализируется как 0) копируются все символы до следующего символа после точки (до index).
- Значение index обновляется, чтобы оно стало равным index+1.
- После обработки всех символов выводится новая строка new_line.
- Программа ожидает нажатия клавиши.