c++ - 是回文函数

标签 c++ loops palindrome

<分区>

我为我的 compsci 类(class)编写了这个函数 isPalindromic,教授希望我们更好地理解库函数的工作原理。所以他要求我们写一个函数 isPalindromic 而我的函数也不行。因为部分太多,我会把整个功能贴出来,大家多多包涵。对不起!

由于某种原因,该函数总是返回 false。传递的词是“HELLO”。我的第一个循环检查没有空格或空字符的单词的大小,因此我可以将它用作第二个循环中的参数。这返回 false,这是正确的,但是当我传递“HELLEH”或“HELLEH”时,它们都返回 false。我至少重写了 5 次,但我不明白为什么它会返回 false。

char* isPalindromic(char inputCheck[]){
    int actWord;
    int sizeCheck = myStrLen(inputCheck);
    char tempWord[actWord];
    for(int check = 0; check <  sizeCheck; check++){
        if(inputCheck[check] = ' ' || inputCheck[check] == '\0')
            actWord = check;
    }

    for(int replace = 0; replace < actWord; replace++){
        tempWord[replace] = inputCheck[actWord - replace];
    } 

    tempWord == inputCheck ? inputCheck = "True" : inputCheck = "False";
    return inputCheck;
}

最佳答案

char tempWord[actWord];

actWord 此时未初始化。因此,您的整个程序具有未定义的行为。


tempWord == inputCheck ? inputCheck = "True" : inputCheck = "False"; 

这也是一个问题;你不能像这样用 == 比较两个字符数组;您只是在比较它们在内存中的位置。为此,您必须使用 重新实现strcmp(尽管实际上,您的算法的更简单版本不需要这样的逻辑)。


您不需要任何这些额外的缓冲空间。您需要做的就是同时从正面和背面进行迭代,比较字符。

const char* isPalindromic(const char inputCheck[])
{
    const int size = myStrLen(inputCheck);
    for (size_t i1 = 0, i2 = size-1; i1 < i2; i1++, i2--)
       if (inputCheck[i1] != inputCheck[i2])
          return "False";
    return "True";
}

( live demo )

此外,我会强烈考虑返回一个 bool,而不是 "True""False"

关于c++ - 是回文函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48817772/

相关文章:

c++ - 为什么会出现链接器错误?

c++ - 为什么我不能在 for 循环的第一条语句中包含 2 个变量

C++ 迭代 vector 返回甚至不在 vector 中的对象

c++ - C++中 '~'有什么用?

algorithm - 计算给定整数序列中的双回文数

c++ - Linux 运行时链接器错误

jquery - 当使用 $.each 循环结果时,如何引用当前迭代的索引?

Python - 一次写入 header - 循环无法正常工作

python - 检查字符串是否为回文,忽略空格和特殊字符

用于回文的 Python reverse()