当前位置: 首页 > 知识库问答 >
问题:

字符串文本字长

东郭展
2023-03-14

大家好。我必须制作这个程序,输入一个文本,输出有多少个单词,以及有多少个长度为1、2等的单词。我已经完成了计算单词数的程序,但对于第二部分我不知道。非常感谢任何能帮忙的人。

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

共有3个答案

费辰阳
2023-03-14

初始化dumi=0,因为当这个运行时,对于任何if选项都为true,它将从一开始就变为2左右。就像如果它变成真的一次,那么dumi将显示2而不是1。

戎鹏云
2023-03-14

您需要以某种方式分割输入字符串,并测量每个子字符串的长度。关于如何分割(标记化)输入,请参见https://stackoverflow.com/posts/236234/edit。

(当然,不需要实际拆分输入就可以获得子字符串的长度,但我认为这会使事情变得不必要地复杂。)

姜烨伟
2023-03-14

嗯,我认为你在这里采取了错误的方法:你应该计算每个长度的单词数,然后将它们相加得到单词总数。

对于单词长度I,将声明一个数组,其中数组中的索引表示单词的长度,并且每次我找到该特定长度的单词时,都会在数组中增加该索引(对于“word1”a[4],因为没有长度为0的单词)。

现在,根据维基百科,英语中最长的单词(假设我们所说的是英语)大约有190000个字母长。你们不需要考虑那个么长的单词(我想),除非你们想考虑那个些不太可能出现的最坏情况;所以这里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++; 
        }
    }

您现在需要遍历数组并查看每个长度有多少个单词。

 类似资料:
  • 我试图开发一个由多个数组和文本视图组成的应用程序,我遇到了一个问题。 我有3个文本视图和2个数组。 我的一个数组包含句子。我的第一个问题是如何突出每个句子中的特定单词?例如:“这是我的第一个数组项”,我需要突出显示字符串中的一个单词,这样当它显示在文本视图1中时,它就会像这样出现..."这是我的第一个数组物品" 我的另一个数组包含单词。它们显示在textview2中,也应高亮显示。我的下一个问题是

  • 在普通字符串中,我可以用反斜杠转义: 在字符串文字中有可能做同样的事情吗?反斜杠不再是转义字符: 到目前为止,我看到的唯一解决方案是字符串连接,这非常难看,以及嵌套插值,这开始变得有点可笑:

  • 当我有一个字符串需要将一个字符连接到它的结尾时,我应该更喜欢超过是否有任何性能原因? 我知道数组字符串连接和字符串生成器,我并不是在询问一般情况下如何连接字符串的建议。 我也知道有些人会有冲动向我解释过早的优化,而且一般来说我不应该为这些小事情费心,请不要... 我之所以问这个问题,是因为从编码风格的偏好来看,我更倾向于使用后一个,但我觉得第一个应该表现得稍微好一点,因为知道所附加的只是一个字符,

  • 我在文件中有一个字符串 当读取该文件时,文本显然是这样的: 是否有干净的方法转换此字符串,以便文件中的值也是代码中字符串的实际值。换句话说,例如,是

  • Boost.Regex 正则表达式是解决大量模式匹配问题的基础。它们常用于处理大的字符串,子串模糊查找,按某种格式tokenize字符串,或者是基于某种规则修改字符串。由于C++没有提供正则表达式支持,使得有些用户被迫转向其它支持正则表达式的语言,如Perl, awk, 和 sed。Regex提供了高效和强大的正则表达式支持,基于与STL同样的前提而设计,这使得它很容易使用。Regex已被即将发布

  • 问题内容: 我已经阅读了有关该主题的几篇文章,但是所提供的代码(有时是片段)都没有帮助我解决转换这样的二进制字符串的简单问题: 插入文本字符串早安 我可能无法将我在stackoverflow中可用的链接中找到的代码片段放在一起。有人会这么友好地给我完整的代码吗?假设我有一个输入字符串(文本)来自我正在通过“ gettext()”访问的JTextarea,例如text = tTextarea.get