我必须做一个程序,告诉我一个字符串是不是使用库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;
}
示例:当我的输入为“非”时,输出应为“回文”,如果输入为“发货”,则输出应为“非回文”。任何人都可以帮我找到问题吗?
答案 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
。
知道了吗?