c - 为什么我的回文检查函数总是对回文返回 false?

标签 c string palindrome sentence

我正在尝试检查一个句子是否为回文。空格和标点符号都不重要。

例子:

• 从不奇数或偶数

• 一个人计划一条巴拿马运河。

• 看门人看名字,车库看门人

这些句子中的任何一个都在我的代码中通过了 true。 在我的第一次尝试中,我尝试删除空格、标点符号并将大写字母转换为小写字母。

int palindrome(char *str){
    int n,n2 = 0,i,j=0;
    n = sizeof(str)/sizeof(char);
    char nova[n];

    for (i=0;i< n;i++){
        if(str[i] >= 'A' && str[i] <= 'Z'){
            nova[n2] = ('a' + str[i] - 'A');
            n2++;
        }
        else if(str[i] >= 'a' && str[i] <= 'z'){
            nova[n2] = str[i];
            n2++;
        }
    }

    i=0;
    while (i < n2-1){
        if (nova[i]!= nova[j]){
            return 0;
        }
        i++;
        j--;
    }

    return 1;
}

最佳答案

第 4 行:您想通过 sizeof 获取元素的数量.

但是如果你通过指针将你的参数传递给函数。

  n = sizeof(str)/sizeof(char);

n 将始终为 4(在 32 位平台上)。相反,使用

  n = strlen(str)

(需要 #include <string.h> )如果是 c 中的字符串格式。

关于c - 为什么我的回文检查函数总是对回文返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39901316/

相关文章:

c - 代码结果说明

c - 在 C : How to construct a linked list in order based on a variable?

c# - 删除字符串中第一个字符的最快方法

java - 我怎样才能把一个字符串放在一行中

java - 嵌套 if 语句没有字符串

c - 如何获取句子中回文词的总数

c - fgets() 是否总是以 null 终止它返回的字符串?

c - mmap 可执行文件可以多次使用吗?

java - 使用指数解析字符串 (Java)

dart - Dart “For Loop” “If Else” “Boolean return”