【发布时间】:2021-11-05 14:47:33
【问题描述】:
我必须编写一个程序,将字符串作为输入并输出字符串中的单词数、回文数和最长回文数。我有一个不错的开始,遍历字符串并返回有多少单词,我知道如何遍历这些单词以找到回文,但我现在非常卡住。这就是我现在所拥有的。任何帮助将不胜感激。
#include <iostream>
#include <string>
int main()
{
std::string word = "";
std::string words;
std::getline(std::cin, words);
int word_count = 1;
int palindrome_count = 0;
for (auto check : words) {
if (check == ' ') {
for (int i = 0; i < word.length(); i++) {
if (word[i] == word[word.length() - 1 - i]) {
palindrome_count++;
}
}
word = "";
word_count++;
}
else {
word = word + check;
}
}
std::cout << word_count << " words" << std::endl;
std::cout << palindrome_count << " palindromes" << std::endl;
}
【问题讨论】:
-
是否需要检查字符串中的每个单词是否为回文?
-
建议:创建一个名为
is_palidrome的函数,它接受一个字符串并返回一个布尔值,如果字符串是回文则返回 true,否则返回 false。这使您可以更好地拆分逻辑。具有较少职责的较小功能几乎总是更容易工作和验证。现在你要做的就是将字符串分解成单词(std::istringstream擅长于此)并将每个单词传递给is_palindrome。如果是,数一数,看看它是否比你迄今为止见过的最大回文更大。 -
是的,我确实需要检查字符串中的每个单词是否是回文
标签: c++ string split counting palindrome