字符串文本单词的长度

时间:2013-12-02 08:49:18

标签: c++ string

大家好。 我必须制作这个程序,你输入一个文本并输出有多少单词,有多少单词长度为一,两个等等到最长的单词。我已完成程序来计算单词数,但对于第二部分,我不知道。非常感谢任何可以提供帮助的人。


#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; 
}

4 个答案:

答案 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]))