【发布时间】:2018-11-29 13:17:51
【问题描述】:
现在这个程序成功地反转了键盘输入的单词。但是我想在反转之前“保存”指针中的单词,这样我就可以比较反转的单词和“原始”,并检查它们是否是回文。我还没有太多经验,可能有比我知道的更多的错误,但我找不到解决方案。
#include <stdio.h>
#include <string.h>
void reverse(char s[])
{
int c,i,j;
for(i=0, j=strlen(s)-1; i<j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void Palindromcheck(char u[], char g[])
{
if(u == g)
{
printf("Word \"%s\" is a palindrom\n", g);
}
else
{
printf("Word \"%s\" is not a Palindrom\n", g);
}
}
int main()
{
char c[30];
printf("Please enter a value \n");
scanf("%s", c);
char *ptr1 = c;
printf("String: %s\n", c);
reverse(c);
printf("%s\n", c);
Palindromcheck(c, *ptr1);
return 0;
}
我收到两个警告:
预期为 'char *' 但参数是 'char' 类型
在函数palindromcheck本身,如:
传递 'palindromcheck' 的参数 2 使指针从没有 a 强制转换 [-Wint-conversion]
在函数调用时。
感谢任何帮助:)
【问题讨论】:
-
Palindromcheck(c, ptr1);? * 将它声明为一个指针,但是当您稍后在它前面加上一个星号时,这意味着取消引用。 -
请注意,
if(u == g)将比较指针的位置,而不是数组的内容。同样传入char[]不会传递长度,只是传递开始指针,所以如果你想使用它进行比较,你也需要传递长度。 -
... 你应该
strdup你要反转的字符串。就目前而言,ptr1 是 c 缓冲区的别名,因此当您将其反转到位时,您也在反转 c。您需要获取它的副本(最好是 free() 之后的副本) -
Palindromcheck 的参数 2 似乎从整数中生成了一个指针,而没有进行强制转换。编译器需要 char*,但参数是 char 类型。编译器信息需要清晰多少?
-
@Lundin 因为我是编程新手,而且不是英语母语,所以很难理解解决问题究竟需要什么,即使对你来说这听起来微不足道。
标签: c string char palindrome