【问题标题】:C - give the list of palindromes from a single lineC - 从单行给出回文列表
【发布时间】:2023-12-22 13:25:01
【问题描述】:

我正在尝试编写一个程序,该程序查找回文(在一行中的几个单词之间)并写入它们。例如:

    >Maszka anna rentner forfreakingsake

    >anna rentner

但是我确实设法检查了第一个单词(直到空格),但我不知道如何开始检查下一个单词。这应该是一些简单,原始的方式,有人可以帮助我吗? 我有什么(不多):

    #include<stdio.h>
    #include <string.h>

    #define N 10000

    int main()
    {
    int i,j;
    char satz[N];
    char palindrome[N];

    fgets(satz);

    for(i=0; i != EOF; i++)
      satz[i] = getchar(); //first filling array with chars

    }
    printf("wth :( ");
    }

我想比较 satz[i] 和 satz[j](j = strlen(word)-1 应该是单词的最后一个字母),palindrome[] 应该是带有回文的数组,我可以打印出来。但是我不知道数组的大小和单词的长度,所以我卡在这里了。

【问题讨论】:

  • 请出示您的代码
  • 您至少应该说出您尝试过的内容...并在此处复制/粘贴您的代码。

标签: c stdout stdin palindrome


【解决方案1】:
#include <stdio.h>
#include <ctype.h>

int main(void){
    char word[128];
    int i=0, ch;

    putchar('>');
    while(EOF != (ch = getchar())){
        if(isspace(ch)){
            if(i){
                int fr, bk;
                for(fr=0, bk=i-1;word[fr]==word[bk];++fr,--bk);
                if(fr < bk)//not palindromes
                    i = 0;
                else {
                    while(i)
                        putchar(word[--i]);
                    putchar(ch);
                }
            }
            if(ch == '\n')
                break;
        } else {
            word[i++] = tolower(ch);//check i < sizeof(word)
        }
    }
    putchar('\n');

    return 0;
}

【讨论】:

  • 它看起来很不错并且运行良好。但是当我在 Windows 中启动这个程序时,控制台在给出答案后立即关闭。我可以就如何解决此类问题获得一些建议吗?
  • @user2957781 getchar();system("pause"); 写在return 0;之前
【解决方案2】:

我能想到的最简单的方法是从该字符串创建一个数组。空格可以是其中的分隔符。所以只需解析它并将每个单词添加到数组中。然后,您可以对该数组中的每个元素使用您的算法。

【讨论】:

  • 数组用空格分隔?请用一个例子进一步解释,因为它是不正确的。
  • 我不认为这是一个答案。应该是评论。
最近更新 更多