递归,用于计算 c++ 中句子中的单词和冗余单词



嗨,我正在尝试计算用户输入的句子中的单词,这是我编写的代码

void Count_Words( )
{
int count=0;
for (i = 0; inserted_text[i] != '';i++)
{
if (inserted_text[i] == ' ')
count++;    
}
cout << "Word Count: " << count + 1;
}

我需要使用递归来写这个,但我无法弄清楚如何。

此外,我需要使用递归计算句子中的冗余单词,我该怎么做?

我不能使用映射,我需要使用基本逻辑来执行此操作。无论如何,我只能用基本逻辑来做到这一点吗?

我同意帽子公鸡的观点(这不适合递归)。我想它服务于教学目的。所以这是另一种选择。

countWords()返回给定子字符串直到其末尾的字数。要计算子字符串0..n的单词,我们可以先计算子字符串1..n的单词。如果字符 0 是一个空格,则加 1。

int countWords(const char* str)
{
if(*str == '')
return 1; // last word
return countWords(str + 1) // how many words are in the remaining substring?
+ (*str == ' ' ? 1 : 0); // count if the beginning of the current substring is a space
}
int main()
{
std::string input = "test test test";
std::cout << countWords(input.c_str()); // 3
}

在这里使用递归并没有意义,但无论如何,这将是一种方法:

void Count_Words(int& i, const std::string& inserted_text, int& count)
{
if (inserted_text[i] == '')
{
++count; // last word
return;
}

if (inserted_text[i] == ' ')
++count;
Count_Words(++i, inserted_text, count); //recurse
}
int main()
{
std::string input = "test test test";
int i = 0;
int count = 0;
Count_Words(i, input, count);
std::cout << count; // 3
}

从这段代码中可以学到的是,引用是实现正确递归的强大工具,如函数参数所示。

正如另一个答案所说,这实际上不是一个应该使用递归解决的问题。 如果有数千个单词怎么办? 这会在某个时候耗尽堆栈内存。

无论如何,这里有一种方法可以递归地执行此操作:

#include <sstream>
#include <string>
#include <iostream>
void Count_Words(std::istringstream& strm, int& count)
{
std::string word;
if ( strm >> word )  // if there is a word, then increment the count
{
++count;
Count_Words(strm, count);  // go to next word recursively
}
}
int Count_Words(std::string inserted_text)
{
// This is the setup for the recursive calls
std::istringstream strm(inserted_text);
int count = 0;
// start the recursion 
Count_Words(strm, count);
return count;
}
int main()
{
std::string test = "This has four words";
std::cout << Count_Words(test);
}   

输出:

4

相关内容

  • 没有找到相关文章

最新更新