C++ 我的句子回文代码(C+;+;)有什么问题?

C++ 我的句子回文代码(C+;+;)有什么问题?,c++,debugging,error-handling,palindrome,sentence,C++,Debugging,Error Handling,Palindrome,Sentence,下面的代码是一个句子回文检查器。我是一个新手程序员,所以我很难调试这段代码。它显示的输出不正确。 例如,如果句子是“一个人,一个计划,一条运河:巴拿马” 结果是假而不是真。(应忽略空格和标点符号。) #包括 类解决方案 { 公众: bool isPalindrome(标准::字符串s) { int l,i; i=0; l=s.长度(); 而(i问题很可能是(例如,ispunt)没有返回bool结果 它们返回一个int,其值可以是“true”的任何非零值 这意味着对于标点符号字符,类似于ispu

下面的代码是一个句子回文检查器。我是一个新手程序员,所以我很难调试这段代码。它显示的输出不正确。 例如,如果句子是“一个人,一个计划,一条运河:巴拿马” 结果是假而不是真。(应忽略空格和标点符号。)


#包括
类解决方案
{
公众:
bool isPalindrome(标准::字符串s)
{
int l,i;
i=0;
l=s.长度();

而(i问题很可能是(例如,
ispunt
)没有返回
bool
结果

它们返回一个
int
,其值可以是“true”的任何非零值

这意味着对于标点符号字符,类似于
ispunt(s[i])==true的条件实际上可能是
false


您需要使用例如
ispunct(s[i])!=0
(或者只使用普通的
ispunct(s[i])

而且,这不是检查回文的方式。我建议使用以下代码:

#include <iostream>

int main() {
    std::string str;
    std::cin >> str;
    for (auto i = 0, j = str.size() - 1; i < j; i++, j--) {
        if (//check for punctuation) {

        }
        else if (str.at(i) != str.at(j)) {
            //not a palindrome
            break;
        }
    }
    return 0;
}
#包括
int main(){
std::字符串str;
std::cin>>str;
对于(自动i=0,j=str.size()-1;i
首先创建一个简单的
main
函数,该函数使用您的类来传递失败的语句。然后,您可以使用调试器在监视变量及其值时逐个语句地逐步执行代码。我还建议您创建临时变量来存储函数调用的中间结果,例如
auto temp1=ispunct(s[i]);
然后使用
temp1==true
而不是
ispunct(s[i])==true
。您可能需要将
if
语句替换为
while
循环。但一定要学会如何自己调试。请避免比较布尔表达式(在这种情况下,表示为
int
)到
true
。它是无用的,并且会(在这种情况下)损坏您的代码。
#include <iostream>

int main() {
    std::string str;
    std::cin >> str;
    for (auto i = 0, j = str.size() - 1; i < j; i++, j--) {
        if (//check for punctuation) {

        }
        else if (str.at(i) != str.at(j)) {
            //not a palindrome
            break;
        }
    }
    return 0;
}