c数组比较麻烦

时间:2017-11-18 15:30:34

标签: c arrays

即时编写一个程序,查看输入的字符串是否为回文序列 即时通讯使用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,所以对我来说有点新鲜)

2 个答案:

答案 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); 
}