用string.h检查单词是否是回文结构

时间:2013-04-07 14:42:02

标签: c palindrome string.h

我必须做一个程序,告诉我一个字符串是不是使用库string.h。我写了下面的代码,但输出总是“palindrome”

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

int main()
{
 char a[100],b[100]; 
 int i,k;  
 printf("Type the string \n");
 gets(a);
 k=strlen(a);
 for(i=0;i<strlen(a);i++)
 {
  a[i]=b[k]; 
  k--;                       
 }           //at the end of this code the string "b" should be the reverse of "a"
 k=strcmp(a,b);
 if (k!=0)   //here I check if a=b or not
 {printf("palindrome");}
 else
 {printf("not palindrome");}
 getch();
 return 0;
}

示例:当我的输入为“非”时,输出应为“回文”,如果输入为“发货”,则输出应为“非回文”。任何人都可以帮我找到问题吗?

5 个答案:

答案 0 :(得分:4)

我认为这是行

a[i]=b[k];

这不会将b[k](您尚未初始化)的内容放入a[i](您已使用get填充)吗?这会覆盖空白中的测试值,(或b内存中的任何内容)你不应该反其道而行吗?

但最好不要这样做 - 你可以只比较数组中的字符。

k=strlen(a);
for(i=0; i<k/2; i++)
   if(a[i] != a[k-i]) 
      return "Not Palindrome";
return "Palindrome";                    

答案 1 :(得分:1)

   /**
    ** Name: palindrome.c
    ** Description: This program checks if a word is palindrome or not
    ** Aldo Núñez Tovar
    **/

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

    int
    isPalindrome ( char* str )
    {
        char* str2 = str + strlen ( str) - 1;

        while ( str < str2 )
        {
            if ( *str++ != *str2-- )
            {
                return 0;
            }
        }
        return 1;
    }

    int
    main ( void )
    {
        char* str = "racecar"; /* level, civic, rotor, racecar */

        printf ( "Is  %s  palindrome? %s\n", str, isPalindrome ( str )? "Yes": "No" );
        return 0;
    }

答案 2 :(得分:0)

我为你修好了,请注意评论:

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

int main()
{
     char a[100],b[100]; 
     int i;
     int stringLen;  
     printf("Type the string \n");
     gets(a);
     stringLen = strlen(a);
     for(i=0; i < stringLen; i++)
     {
         //First you want to copy to B not A...
         //second, you need to remove "1" from the size cause array start from "0".
         b[stringLen-1-i] = a[i];            
     }//at the end of this code the string "b" should be the reverse of "a"

     if (strcmp(a,b) == 0)   //0 mean equal !
     {
         printf("palindrome");
     }
     else
     {
         printf("not palindrome");
     }
     getch();
     return 0;
}

答案 3 :(得分:0)

当两个字符串相等时,

strcmp()返回零值。 必须是这样的:

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

int main()
{
    char a[100],b[100]; 
    int i,k;  
    printf("Type the string \n");
    gets(a);
    k=strlen(a)-1;
    for(i=0;i<strlen(a);i++)
    {
        b[i]=a[k]; //assign to b not to a
        k--;                       
    }
    b[strlen(a)]='\0';//terminate the string with null character
    //at the end of this code the string "b" should be the reverse of "a"
    k=strcmp(a,b);
    if (k==0)   //here I check if a=b or not
    {printf("palindrome");}
    else
    {printf("not palindrome");}
    getch();
    return 0;
}

答案 4 :(得分:-2)

您的代码说明了这一点:

k=strlen(a);

修复此问题

k=strlen(a)-1;

这是因为如果长度为15,则数组索引0到14等于15。 所以,从14开始反转。这意味着length-1

知道了吗?