В символьной строке оставить только слова, начинающиеся и заканчивающиеся на одну и ту же букву - 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();
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами и стандартным вводом-выводом.
  2. Определение максимально возможной длины строки, чтобы избежать переполнения буфера.
  3. Инициализация счётчиков для обработки входной строки.
  4. Считывание символов из стандартного ввода до тех пор, пока не будет достигнут конец файла или не будет встречен символ новой строки.
  5. Если встречен символ новой строки, то он также добавляется в новую строку.
  6. В конце входной строки добавляется символ нулевого значения для обозначения конца строки.
  7. Инициализация счётчиков для обработки новой строки.
  8. Пока не будут прочитаны все символы из входной строки, происходит обработка строки:
    • Если текущий символ является пробелом, точкой, новой строкой или запятой, и при этом предыдущий символ не равен текущему, то текущий символ добавляется в новую строку, а предыдущий символ проверяется на равенство символу новой строки. Если равен, то счётчик символов новой строки сбрасывается на значение счётчика символов старой строки, а значение счётчика старой строки не изменяется.
    • Если текущий символ не является пробелом, точкой, новой строкой или запятой, то он добавляется в новую строку.
  9. После обработки всех символов из входной строки, выводится на экран последняя строка, полученная после обработки.
  10. Программа ожидает ввода с клавиатуры, чтобы пользователь мог ввести новую строку.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы