即时编写一个程序,查看输入的字符串是否为回文序列 即时通讯使用c,而不是c ++ 我编写了一个函数来执行此操作,已输入的字符串将被放入main函数中名为data的数组中。
int palindroom(char data) {
length = sizeof(data); //getting the length of the word
for (i = 0; i < length; i++){
j = length-1-i; //inverting the string
resstr[i] = data[j]; //
}
if (data = resstr)
return (1); //returning result
else return (0); }
我在视觉工作室得到c2109和E0142错误,但我真的没有得到什么错误。 (可能很高兴知道我刚开始在学校学习c,所以对我来说有点新鲜)
答案 0 :(得分:1)
你传递的不是一个字。你需要传递字符数组来传递这个词。
要知道空终止字符串的长度,您将使用strlen()
函数。
要反转字符串,您可以使用strrev
但是您可以做更简单的事情来确定字符串是否是回文。
data = resstr
是一项不进行比较的作业。即使它是==
,比较也不会达到预期效果。要比较strimgs,您需要使用strcmp()
。
您想要做的更简单的版本: -
int pal(char *s)
{
size_t len = strlen(s);
char *rs = s + len - 1;
while (s < rs){
if (*rs != *s)
return 0;
s++;
rs--;
}
return 1;
}
逻辑是在回文的情况下,字符串向前和向后读取相同的内容。
例如
ABCBA和它的相反是相同的。我们做的是
ABCBA
| |
s rs <--- same
ABCBA
| |
s rs <--- same
对于非palindromerome,检查将是这样的一些: -
ABCDA
| |
s rs <-- same
ABCDA
| |
s rs <-- not same // return 0
为了帮助你传递char数组。
假设你读了这样一个字符串: -
char s[50]; // you will check 49 letter words atmost;
scanf("%49s", s);
if( pal(s) ){
puts("found a palindrome");
}
else {
puts("Non-palindrome");
}
答案 1 :(得分:0)
您的代码存在一系列问题。
int palindroom(char data)
此处数据需要单个字符,但您将指向char的指针传递给它。
length = sizeof(data);
你需要的功能不是sizeof()而是strlen()。
if (data = resstr)
这里,首先'='是赋值运算符,而比较运算符是'=='。但是,'=='也不适用于字符串。你需要strcmp()。
参考:
https://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm https://www.tutorialspoint.com/c_standard_library/c_function_strlen.htm
<强>代码强>
int palindroom(char * data) {
length = strlen(data); //getting the length of the word
for (i = 0; i < length; i++){
j = length-1-i; //inverting the string
resstr[i] = data[j]; //
}
if (strcmp(resstr, data) == 0)
return (1); //returning result
else return (0);
}