Изменить строку, оставив только слова палиндромы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Надо написать программу: дана строка символов, изменить строку, оставив только слова палиндромы. Нашла похожую программу:
#include <stdio.h>
#include <stdlib.h>
int check(char *str)
{
    int n = 0, m = -1;
    char *p = str;
    while(*p++) m++;
    if(n == m) return 0;
    while(n < m)
        if(str[n++]!=str[m--]) return 0;
 
    return 1;
}
int main()
{
    char str[1000] = {0};
    char temp[1000] = {0};
    char *p;
    int i = 0;
 
    printf("%s", "Input string:");
    gets(str);
 
    p = str;
 
   do{
        if((*p >= 'A'  && *p <= 'Z') || (*p >= 'a' && *p <= 'z'))
        {
            while(*p!=' ')
            {
               if(!*p) break;
                if((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z'))
                    temp[i++] = *p;
                *p++;
            }
            i = 0;
            *p--;
int n;
for( n = 0; n < 1000; ++n); temp[n] = ' ';
            if(check(temp)==1)

            printf("Output string:%s\n",temp);
          
      }
   }while(*p++);
 
    system("pause");
 
    return 0;
 
}
Только в конце каждое слово выводится отдельной строкой, а как сделать, чтобы выводилось в одну строку? Помогите.

Решение задачи: «Изменить строку, оставив только слова палиндромы»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    char str[1000] = {0};
    char temp[1000] = {0};
    char *p;
    int i = 0;
 
    printf("%s", "Input string:");
    gets(str);
 
    p = str;
 
   printf("Output string:");
   do{
        if((*p >= 'A'  && *p <= 'Z') || (*p >= 'a' && *p <= 'z'))
        {
            while(*p!=' ')
            {
               if(!*p) break;
                if((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z'))
                    temp[i++] = *p;
                *p++;
            }
            i = 0;
            *p--;
int n;
for( n = 0; n < 1000; ++n); temp[n] = ' ';
            if(check(temp)==1)
            
            printf(" %s", temp);
          
      }
   }while(*p++);
    puts("");
    system("pause");
 
    return 0;
 
}

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

В этом коде на языке C происходит следующее:

  1. Объявляются три переменные: str (строка, в которую вводится исходная строка), temp (строка, в которую будут добавляться палиндромы) и p (указатель на текущий символ в строке).
  2. Выводится приглашение для ввода строки.
  3. Вводится строка.
  4. Указатель p устанавливается на первый символ введенной строки.
  5. В цикле do-while проверяется каждый символ строки. Если символ является буквой, он добавляется в строку temp.
  6. После прохождения каждого слова (отделяемого пробелами), проверяется, является ли это слово палиндромом. Если да, то это слово выводится на экран.
  7. В конце программы выводится приглашение нажатия любой клавиши для выхода из программы. Код имеет некоторые проблемы:
    • Он работает только для слов, состоящих только из букв.
    • Он не обрабатывает случаи, когда в строке нет слов, или когда вся строка является палиндромом.
    • Он не удаляет пробелы в начале и в конце слов.

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


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

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

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