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;
}