C++ 布尔函数总是返回false

C++ 布尔函数总是返回false,c++,function,boolean,C++,Function,Boolean,嗨,我正在尝试创建一个函数,让用户知道输入的单词是否是回文,拼写是否相同,例如:kayak。这是我提出的函数,但由于某些原因,函数总是返回false #include <iostream> #include <cctype> using namespace std; bool compare(string str2) { int first = 0, mid, last = (str2.size() - 1); while(first < las

嗨,我正在尝试创建一个函数,让用户知道输入的单词是否是回文,拼写是否相同,例如:kayak。这是我提出的函数,但由于某些原因,函数总是返回false

#include <iostream>
#include <cctype>
using namespace std;

bool compare(string str2)
{
    int first = 0, mid, last = (str2.size() - 1);

    while(first < last)
    {
        if(first == last)
        {
            first++;
            last--;
        }
        else return(false);
    }
    return(true);  
}

int main()
{
    string pal;

    cout <<"Enter your single word palindrome: ";
    getline(cin,pal);

    if(compare(pal) == true)cout << pal <<" is a palindrome.\n";
    else                    cout << pal <<" is not a palindrome.\n";

    return(0);
}

实际上,您没有进行任何字符比较,只是比较了索引的第一个和最后一个-它们不匹配,因此返回false。

如果first==last{}
这就是错误所在

在下面的代码之后,如果我们假设last大于0,则first
int first = 0, mid, last = (str2.size() - 1);

while(first < last)
{
    if(first == last)
    {
        first++;
        last--;
    }
    else return(false);
}

在代码中,您应该比较char而不是int。因此请尝试以下方法:

bool compare(string str2)
{
    int first = 0, mid, last = (str2.size() - 1);

    while(first] < last)
    {
        if(str2[first] == str2[last])
        {
            first++;
            last--;
        }
        else 
            return(false);
    }
    return(true);  
}

如果first==last->first和last是索引数字,您需要比较while循环中的字符,您的if是错误的。您需要str2[first]==str2[last],因为您正在检查两个first都小于last,并且first与last相同,这两个值不能都为true。您的意思是str2[first]==str2[last]?