我对C很新,我有一点问题。我必须编写一个程序来获取用户输入并确定输入是否是回文。我已经让程序反转输入,但是我无法将字符串进行比较。所有输入都不是回文。我想使用整数下标索引来比较输入。我还想忽略所有非字母字符,我认为这是一个c.type函数。
#include <stdio.h>
#include <string.h>
#define N 50
main()
{
char array[N] = {0};
char front;
char end;
char x;
char w =0;
char i;
char forward;
char reverse;
printf("Enter Message: ");
gets(array);
front = sizeof(array);
end = sizeof(array) - 1;
for( i = 0; i <= front; i++){
forward = array[i];
}
for( x = end; x >= 0; x--){
reverse = array[x];
}
if (forward != reverse){
w = 1;
}
if(w == 1){
printf("Not a Palindrome");
}
else{
printf("Palindrome");
}
printf("\n");
return 0;
}
答案 0 :(得分:4)
我的C有点生锈,但你只需要搜索字符串长度的一半(减去1)。
int isPalindrome(char *str)
{
char *p1 = str
char *p2 = str + strlen(str) - 1;
while(p2 > p1) {
if (*p1 != *p2) return 0;
p1++; p2--;
}
return 1;
}
我们可以将自动增量和减量用于等式检查,但阅读起来有点困难。
答案 1 :(得分:1)
您的代码中存在许多错误。
首先,反向和前进应为char[]
类型,而不是char
。
使用 strlen 查找字符串的长度。
sizeof 无效。 sizeof(array)
将始终返回(sizeof(char)*50)
反转字符串时出现错误。
它应该是reverse[i]=array[x]
。
为了比较原始字符串和反向字符串是否相等,您只是比较一个字符,因为变量reverse和forward在您的代码中是char类型。
你应该比较原始(前进)和反向字符串(字符数组)
使用strcmp
函数。
我已经纠正过了。这应该适用于每个测试用例。
#include <stdio.h>
#include <string.h>
#define N 50
int main()
{
char array[N] = {0};
char front;
char end;
char x;
char i;
char forward[N];
char reverse[N];
printf("Enter Message: ");
gets(array);
front = strlen(array);
end = strlen(array) - 1;
for( i = 0; i <= front; i++)
{
forward[i]= array[i];
}
for( i=0,x = end; x >= 0; i++,x--)
{
reverse[i]= array[x];
}
reverse[i]=0;
if (strcmp(forward,reverse)!=0)
{
printf("Not a Palindrome");
}
else{
printf("Palindrome");
}
printf("\n");
return 0;
}
在IDEONE检查DEMO