2013-11-25 21 views
-1

我正在尝试编写一个程序,它寻找palindromes(在单行中的几个字之间)并写入它们。例如:C - 从单行给出回文列表

>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 :("); 
    } 

我想比较起价[I]与起价[J](J = strlen的(字)-1应该是单词的最后一个字母),回文[]应该排列回文,我可以打印。但是我不知道数组的大小,也不知道单词的长度,所以我被困在这里。

+1

请出示你有 –

+1

你至少应该告诉你尝试过什么......和复制/粘贴在这里你的代码。 – perror

回答

0

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

+1

数组由空格分隔吗?请用一个例子进一步解释,因为它是不正确的。 – interjay

+0

我不认为这相当于一个答案。应该可能是一个评论。 – iamnotmaynard

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

它看起来很不错,效果很好。但是当我在Windows中启动这个程序时,控制台在给出答案后立即关闭。我能得到一些建议如何解决这个问题? – user2957781

+0

@ user2957781'getchar();'或'system(“pause”);'在return 0之前写入''' – BLUEPIXY