1

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

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

示例:当我的输入为“非”时,输出应为“回文”,如果输入为“船”,则输出应为“非回文”。谁能帮我找出问题所在?

4

5 回答 5

4

我认为这是行

a[i]=b[k];

这不是将b[k](您尚未初始化的)的内容放入a[i](您已用get填充的)吗?这会用空格覆盖 a 中的测试值,(或 b 的内存中的任何内容)你不应该做相反的事情吗?

但更好的是根本不这样做 - 您可以只比较 a 数组中的字符。

k=strlen(a);
for(i=0; i<k/2; i++)
   if(a[i] != a[k-i]) 
      return "Not Palindrome";
return "Palindrome";                    
于 2013-04-07T14:45:55.387 回答
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;
    }
于 2017-01-18T22:16:59.793 回答
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;
}
于 2013-04-07T14:53:59.210 回答
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;
}
于 2013-04-07T14:54:13.440 回答
-2

你的代码是这样说的:

k=strlen(a);

像这样修复

k=strlen(a)-1;

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

知道了?

于 2018-05-18T18:30:50.737 回答