我写了一个回文检查函数,它在大多数情况下都能正常工作,但是如果空格或标点符号不在字符串的中间,它就表示它不是回文。如何忽略空白和标点符号?
即
初试:
Enter string to test for palindrome:
hannah
string is a palindrome.
二测:
Enter string to test for palindrome:
han nah
string is a palindrome.
第三次试验:
Enter string to test for palindrome:
hann.ah
string is not a palindrome.
第四个测试:
Enter string to test for palindrome:
han.nah
string is a palindrome.
我想知道如果有一种方法可以忽略空格和标点符号都在一起,这样h.annah
或hann ah
会被认为是回文?
这里是我的代码:
void isPalindrome (string s){
if(equal(s.begin(), s.begin() + s.size()/2, s.rbegin()))
cout << "string is a palindrome. " << endl;
else
cout << "string is not a palindrome. " << endl;
}
int main(){
string test1;
cout << "Enter string to test for palindrome: " << endl;
getline(cin, test1);
isPalindrome(test1);
string test2;
cout << "Enter string to test for palindrome: " << endl;
getline(cin, test2);
isPalindrome(test2);
string test3;
cout << "Enter string to test for palindrome: " << endl;
getline(cin, test3);
isPalindrome(test3);
return 0;
}
你应该在编写函数的习惯得到像'isPalindrome'这样的返回'bool'的方式,不是产生输出的方式,也没有给出其实际做法的其他指示。另外,像这样的参数应该是'const string&s'来避免繁琐的副本,并允许编译器更好地优化。 – tadman
您还需要做一些基本的阅读,了解如何在程序变成无尽的剪切和粘贴痛苦之前编写一个简单的'for'循环。编写一个循环执行三次应该很简单,并且比你在这里更简洁。 – tadman