C - 从单行给出回文列表

标签 c stdout stdin palindrome

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

    >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[] 应该是带有回文的数组,我可以打印它。但我不知道数组的大小,也不知道单词的长度,所以我被困在这里。

最佳答案

#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;
}

关于C - 从单行给出回文列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20197326/

相关文章:

perl - 在 Perl 中过滤 STDOUT

c - C 中的刷新输出缓冲区 (cgi)

ruby - 如何将控制台输出显示到标准输出并将其存储在变量中?

node.js - 未知方法 process.openStdin()

Node.js:当子进程在对其标准输入流进行大量写入操作期间突然关闭时,会引发无法捕获的错误

c - 将 PATH 环境变量拆分为单独的文件路径

c - long long 与 int 乘法

c - fflush(stdin) 和 flushstdin() 之间的区别

c# - P/Invoke 返回 void*

c - 一种新的换行方法。它是编译器特定的功能还是新的语言标准?