В символьной строке оставить только слова, начинающиеся и заканчивающиеся на одну и ту же букву - 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(); }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и стандартным вводом-выводом.
- Определение максимально возможной длины строки, чтобы избежать переполнения буфера.
- Инициализация счётчиков для обработки входной строки.
- Считывание символов из стандартного ввода до тех пор, пока не будет достигнут конец файла или не будет встречен символ новой строки.
- Если встречен символ новой строки, то он также добавляется в новую строку.
- В конце входной строки добавляется символ нулевого значения для обозначения конца строки.
- Инициализация счётчиков для обработки новой строки.
- Пока не будут прочитаны все символы из входной строки, происходит обработка строки:
- Если текущий символ является пробелом, точкой, новой строкой или запятой, и при этом предыдущий символ не равен текущему, то текущий символ добавляется в новую строку, а предыдущий символ проверяется на равенство символу новой строки. Если равен, то счётчик символов новой строки сбрасывается на значение счётчика символов старой строки, а значение счётчика старой строки не изменяется.
- Если текущий символ не является пробелом, точкой, новой строкой или запятой, то он добавляется в новую строку.
- После обработки всех символов из входной строки, выводится на экран последняя строка, полученная после обработки.
- Программа ожидает ввода с клавиатуры, чтобы пользователь мог ввести новую строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д