我正在练习 Koeing 加速 C++,并想验证我的答案。由于网上没有可用的解决方案,我想在这里发布并请专家对我的解决方案的看法。我不确定人们是否会喜欢我把它贴在这里。如果没有,请告诉我,我以后不会这样做。还要提一下,这不是家庭作业,纯粹是我希望将我的 C++ 技能提升到一个新的水平。
问题:编写一个程序来查找字典中的所有回文。接下来,找到最长的回文。
到目前为止我所做的-> 我已经定义了测试回文的函数,还将所有单词存储在一个列表中。我在下面发布了我的代码。
我被困在哪里: 我需要建议,我选择使用列表数据结构而不是向量是否好?其次,我被困在如何显示最长的单词。我可以显示最长的长度但不能显示最长的单词。
我在下面的尝试
bool palindromeTest( const std::string& input )
{
typedef std::string::size_type strSize;
strSize i = 0;
strSize j = input.size() - 1 ;
while( i < input.size() )
{
if ( input[i] != input[j])
{
return false;
}
i++;
j--;
}
return true;
}
int main()
{
// stores all words in a list or vector
std::list< string> listDict;
std::string readWord;
std::ifstream readFile( "/Users/apple/palidndrome-ch5-10/dict.txt" );
if( ! readFile )
{
std::cout <<" failed to open file" << std::endl;
return 0;
}
while( readFile >> readWord )
{
listDict.push_back( readWord );
}
std::string::size_type maxLen = 0 ;
std::string longestWord = " "; // to store longest palindrome
// print all the palindrome words and also which is longest palindrome.
for( std::list<std::string>::const_iterator it = listDict.begin(); it != listDict.end(); ++it )
{
if( palindromeTest( *it ) )
{
std::cout <<" the word -> " << *it << " is palindrome" << std::endl;
// find max len of palindrome;
maxLen = max( maxLen, it->size() );
longestWord = *it ;// need to change code here ?? no idea how
}
}
std::cout <<" the maximum len is = " << maxLen << std::endl;
std::cout << " the word with maximum length is " << longestWord ; // something is wrong here
return 0;
}