寻找回文
Find Palindrome
我想找到一个单词的回文。这里有什么问题?
主要功能:
int size;
string input;
cin>>input;
size = input.length();
if(testPalindrome(input,size-1,0))
cout<<"It's Palindrome";
else
cout<<"It's not Palindrome";
测试回文函数是:
bool testPalindrome (string pal , int last, int first){
if (pal[first] != pal[last])
return false;
else{
if (first<last)
testPalindrome(pal,last-1,first+1);
else
return true;
}
}
我已经阅读 this link 并找到了确定回文的答案,但为什么这个不起作用?
您需要return递归调用的结果,就像调用任何其他函数一样。
如果不这样做,则行为未定义。
我想你忘记了函数中的 return 语句
if (first<last)
return testPalindrome(pal,last-1,first+1);
^^^^^^^
通常一个范围的第一个参数指定下限值,第二个参数指定不包括在范围内的上限值或序列中元素的数量..
并且第一个参数应该声明为常量引用类型,因为字符串本身没有改变,你将逃避额外的内存分配。
递归函数可以这样写
#include <iostream>
#include <string>
bool testPalindrome(const std::string &s,
std::string::size_type i,
std::string::size_type n)
{
return n < 2 || (s[i] == s[n-1] && testPalindrome(s, i + 1, n - 2) );
}
int main()
{
std::cout << testPalindrome("abba", 0, 4) << std::endl;
std::cout << testPalindrome("aba", 0, 3) << std::endl;
std::cout << testPalindrome("aa", 0, 2) << std::endl;
std::cout << testPalindrome("a", 0, 1) << std::endl;
std::cout << testPalindrome("ab", 0, 2) << std::endl;
return 0;
}
程序输出为
1
1
1
1
0
检查 std::string
类型的对象是否为回文的最简单方法是编写表达式
s == std::string( s.rbegin(), s.rend() )
我想找到一个单词的回文。这里有什么问题?
主要功能:
int size;
string input;
cin>>input;
size = input.length();
if(testPalindrome(input,size-1,0))
cout<<"It's Palindrome";
else
cout<<"It's not Palindrome";
测试回文函数是:
bool testPalindrome (string pal , int last, int first){
if (pal[first] != pal[last])
return false;
else{
if (first<last)
testPalindrome(pal,last-1,first+1);
else
return true;
}
}
我已经阅读 this link 并找到了确定回文的答案,但为什么这个不起作用?
您需要return递归调用的结果,就像调用任何其他函数一样。
如果不这样做,则行为未定义。
我想你忘记了函数中的 return 语句
if (first<last)
return testPalindrome(pal,last-1,first+1);
^^^^^^^
通常一个范围的第一个参数指定下限值,第二个参数指定不包括在范围内的上限值或序列中元素的数量..
并且第一个参数应该声明为常量引用类型,因为字符串本身没有改变,你将逃避额外的内存分配。
递归函数可以这样写
#include <iostream>
#include <string>
bool testPalindrome(const std::string &s,
std::string::size_type i,
std::string::size_type n)
{
return n < 2 || (s[i] == s[n-1] && testPalindrome(s, i + 1, n - 2) );
}
int main()
{
std::cout << testPalindrome("abba", 0, 4) << std::endl;
std::cout << testPalindrome("aba", 0, 3) << std::endl;
std::cout << testPalindrome("aa", 0, 2) << std::endl;
std::cout << testPalindrome("a", 0, 1) << std::endl;
std::cout << testPalindrome("ab", 0, 2) << std::endl;
return 0;
}
程序输出为
1
1
1
1
0
检查 std::string
类型的对象是否为回文的最简单方法是编写表达式
s == std::string( s.rbegin(), s.rend() )