使用C中的函数检查字符串是否为回文序列

时间:2016-03-20 06:21:38

标签: c

我想检查用户输入的字符串是否是回文。没有使用函数我已经完成了这个问题但是当我使用函数来解决这个问题时,我总是得到相同的输出:

  

输入的字符串不是回文!

即使用户输入的字符串是回文,我也会获得相同的输出。这是我的代码:

#include <stdio.h>
#include <string.h>

void reverse(char [],int);

int main() {
    char a[100];int len, i = 0;

    printf("Please enter the string to check: \n");
    fgets(a,100,stdin);

    //Loop to replace the '\n' inserted at the end of string due to fgets() with '\0'
    for (int i = 0; i < strlen(a); ++i)
    {
        if (a[i] == '\n')
        {
            a[i] = '\0';
        }
    }

    len = strlen(a);

    reverse(a,len);

    return 0;
}

void reverse(char b[100], int n) {
    char c[100];int k=0;

    //Read characters from b[] from the end and store them into c[]
    for (int i = n-1; i >= 0; i--)
    {
        c[k] +=b[i];
        k++;
    }
    c[k] = '\0';

    //Check if the reversed string c[] and the actual string b[] are equal
    if(strcmp(c,b) == 0)
        printf("The Entered String Is Palindrome!\n");
    else
        printf("The Entered String Is Not Palindrome!\n");
}

reverse()函数中的代码与我用来解决没有函数的相同问题的代码相同(并且该程序工作得很好)。但它仍然没有提供正确的输出。我在这里做错了什么?

编辑:好的,所以我根据用户的建议删除了c[k] += b[i],现在效果非常好。但我仍然没有得到它。我的意思是我在同一个程序中使用相同的行,唯一的区别是我没有使用那里的函数概念,它工作得很好。这是代码:

#include <stdio.h>
#include <string.h>

int main() {
    char a[100], b[100];
    int k=0;

    printf("Please enter the string: \n");
    fgets(a,100,stdin);

    //To replace the '\n' at the end of the string inserted by fgets()
    for (int i = 0; i < strlen(a); ++i)
    {
        if(a[i] == '\n')
            a[i] = '\0';
    }

    for (int i = strlen(a)-1; i >=0 ; i--)
    {
        b[k] += a[i];
        k++;
    }

    if (strcmp(a,b) == 0)
    {
        printf("The entered string is palindrome!\n");
    }
    else
        printf("The entered string is not palindrome! \n");

    return 0;
}

我不知道背后有一些概念吗?如果是的话请赐教。

1 个答案:

答案 0 :(得分:6)

您使用具有自动存储持续时间的未初始化变量的值来调用未定义行为,这是不确定的。

只需将c[k] +=b[i];的值指定为b,而不是添加c[k] = b[i];