大家好。 我必须制作这个程序,你输入一个文本并输出有多少单词,有多少单词长度为一,两个等等到最长的单词。我已完成程序来计算单词数,但对于第二部分,我不知道。非常感谢任何可以提供帮助的人。
#include <iostream>
using namespace std;
int main()
{
int br(string);
string text;
cout<< "Enter a text: ";
getline(cin,text);
cout << "Number of words: " << br(text) << endl;
return 0;
}
int br(string text)
{
int dumi = 1;
for(int i = 0; i < text.length();i++){
if(text[i] == ' ' || text[i] == ',' || text[i] == ';' || text[i] == '.' )
dumi++;}
return dumi;
}
答案 0 :(得分:1)
好吧,我认为你在这里采取了错误的方法:你应该计算每个长度的单词数量,然后将它们相加以得到单词的总数。
对于单词长度I,将声明一个数组,其中数组中的索引表示单词的长度,并在每次找到该特定长度的单词时递增该数组中的索引(对于“word1”a [4] ++,因为没有长度为0的单词。
现在,根据wikipedia,英语中最长的单词(假设它是我们所说的英语)是 ~190.000字母。你不需要考虑那么长的话(我认为),除非你想要照顾不太可能出现的,最糟糕的情况;所以 200 可能已经足够了。
返回代码:
int words[200]; // don't foreget to initialize the elements to 0
int letterCount =0;
for(int i = 0; i < text.length();i++){
if(text[i] == ' ' || text[i] == ',' || text[i] == ';' || text[i] == '.' )
{
if(letterCount > 0)
words[letterCount]++;
letterCount =0;
}
else{
letterCount++;
}
}
现在需要浏览数组,看看每个长度有多少个单词。
答案 1 :(得分:0)
您需要以某种方式拆分输入字符串并测量每个子字符串的长度。有关如何拆分(标记化)输入的一些指示,请参阅https://stackoverflow.com/posts/236234/edit。
(当然可以在不实际分割输入的情况下获得子串的长度,但我认为这会使事情变得不必要地复杂化。)
答案 2 :(得分:0)
初始化dumi = 0因为当这次运行时,对于任何if选项都是true,它将变为2左右而不是从start开始。如果一旦成为真,那么dumi将显示2而不是1。
答案 3 :(得分:0)
if(text[i] == ' ' || text[i] == ',' || text[i] == ';' || text[i] == '.' )
可能做得更好:
#include <cctype>
...
if (std::isspace(text)) || std::ispunct(text[i]))