В символьной строке оставить только слова, начинающиеся и заканчивающиеся на одну и ту же букву - C (СИ)
Формулировка задачи:
Здравствуйте,
Помогите, пожалуйста исправить ошибку в программе, написанную на языке С
В некоторых случаях не работает
Например в строке dshfhjd hjghjg
Выводит hjd
В символьной строке оставить только слова, начинающиеся и заканчивающиеся на одну и ту же букву.(Не использовать встроенных функций обработки строк)
#include <stdio.h>
#define MAXLINE 100
void main (void)
{
int f;
int i, j, k, p, i2, t;
char c;
char str1[MAXLINE];
char str2[MAXLINE]="";
i2=0;
i=0;
while ( (c=getchar())!=EOF && c!='\n')
{
str1[i]=c;
++i;
}
if (c=='\n')
{
str1[i]=c;
++i;
}
str1[i]='\0';
i=p=f=t=0;
while (str1[i]!='\0')
{
if ((str1[i]==' ') || (str1[i]=='.') || (str1[i]=='\n') || (str1[i]==', '))
{
i2=i-1;
if (str1[p]==str1[i2])
f=f+1;
p=i+1;
}
if (f!=0)
{
for (f=t; f<=(t+i-i2+1); f+=1)
str2[f]=str1[i2+f-t-2];
t=f;
f=0;
}
i++;
}
printf ("%s\n", str2);
}Решение задачи: «В символьной строке оставить только слова, начинающиеся и заканчивающиеся на одну и ту же букву»
textual
Листинг программы
#include <stdio.h>
#define MAXLINE 100
void main (void) {
int i=0, j, k;
char c, str1[MAXLINE], str2[MAXLINE]="";
while ( (c=getchar())!=EOF && c!='\n'){
str1[i]=c; ++i;
}
if (c=='\n'){
str1[i]=c; ++i;
}
str1[i]='\0'; i=j=k=0;
while (str1[ i ] != '\0'){
str2[ k ] = str1[ i ];
if ( (str2[ k ]==' ') || (str2[ k ]=='.') || (str2[ k ]=='\n') || (str2[ k ]==',') ){
if ( str2[ k - 1 ] != str2[ j ] ) {
str2[ j ] = '\0'; k = j; i++; continue;
} else j = k + 1;
}
k++;i++;
}
str2[ k - 1 ]= '\0'; printf("%s\n",str2);
getchar();
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и стандартным вводом-выводом.
- Определение максимально возможной длины строки, чтобы избежать переполнения буфера.
- Инициализация счётчиков для обработки входной строки.
- Считывание символов из стандартного ввода до тех пор, пока не будет достигнут конец файла или не будет встречен символ новой строки.
- Если встречен символ новой строки, то он также добавляется в новую строку.
- В конце входной строки добавляется символ нулевого значения для обозначения конца строки.
- Инициализация счётчиков для обработки новой строки.
- Пока не будут прочитаны все символы из входной строки, происходит обработка строки:
- Если текущий символ является пробелом, точкой, новой строкой или запятой, и при этом предыдущий символ не равен текущему, то текущий символ добавляется в новую строку, а предыдущий символ проверяется на равенство символу новой строки. Если равен, то счётчик символов новой строки сбрасывается на значение счётчика символов старой строки, а значение счётчика старой строки не изменяется.
- Если текущий символ не является пробелом, точкой, новой строкой или запятой, то он добавляется в новую строку.
- После обработки всех символов из входной строки, выводится на экран последняя строка, полученная после обработки.
- Программа ожидает ввода с клавиатуры, чтобы пользователь мог ввести новую строку.