首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在向量中查找字符串中的字符

在向量中查找字符串中的字符
EN

Stack Overflow用户
提问于 2010-04-19 09:08:29
回答 3查看 3.2K关注 0票数 2

从标题上看,我是以一种相当复杂的方式做程序的。但!我还是问问吧,xD

这是一个简单的程序,我做了回答问题3-3加速C++,这是一本很棒的书,在我看来。

我创建了一个向量:

代码语言:javascript
复制
vector<string> countEm;

接受所有有效字符串的。因此,我有一个包含字符串元素的向量。

接下来,我创建了一个函数

代码语言:javascript
复制
int toLowerWords( vector<string> &vec )
{
    for( int loop = 0; loop < vec.size(); loop++ )
        transform( vec[loop].begin(), vec[loop].end(),
            vec[loop].begin(), ::tolower );

它将输入拆分为所有小写字符,以便于计数。到现在为止还好。

我创建了第三个也是最后一个函数来计算单词,这就是我被困的地方。

代码语言:javascript
复制
int counter( vector<string> &vec )
{

for( int loop = 0; loop < vec.size(); loop++ )
    for( int secLoop = 0; secLoop < vec[loop].size(); secLoop++ )
    {
        if( vec[loop][secLoop] == ' ' )

这看起来太可笑了。使用二维数组来调用向量的字符,直到我找到一个空格。太荒谬了。我不认为这是一个优雅甚至可行的解决方案。如果这是一个可行的解决方案,那么我将从空格中回溯,复制我在一个单独的向量中找到的所有字符,并对这些字符进行计数。

我的问题是。我如何将字符串向量分解成单独的单词,这样我才能实际计算它们呢?我想使用strchr,但它没有给我任何顿悟。

通过Neil解决方案:

代码语言:javascript
复制
stringstream ss( input );
while( ss >> buffer )
    countEm.push_back( buffer );

这样我就能很容易地数出(反复出现的)单词。

然后,我通过Wilhelm做了一个解决方案,一旦我重写它,我就会发布它,因为我意外地删除了该解决方案!我真笨,但一旦我再写一遍,我就会发出去。

我要感谢你们大家的投入!解决方案奏效了,我成为了一个更好的程序员。如果我能投你的票,我就会:P,一旦我能,我会的!再次感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-19 09:14:08

如果单词总是被分隔开,那么分割它们的最简单的方法就是使用一个字符串:

代码语言:javascript
复制
string words = ....   // populat
istringstream is( words );

string word;
while( is >> word ) {
   cout << "word is " << word << endl;
}

当然,您需要编写一个函数来完成这个任务,并将其应用到您的字符串中。或者最好不要存储字符串,而是在初始输入时将字符串拆分成单词。

票数 2
EN

Stack Overflow用户

发布于 2010-04-19 09:46:47

您可以使用std::istringstream逐个提取单词并对其进行计数。但是这种方法在空间复杂度上消耗了O(n)。

代码语言:javascript
复制
string text("So many words!");
size_t count =  0;
for( size_t pos(text.find_first_not_of(" \t\n"));
    pos != string::npos;
    pos = text.find_first_not_of(" \t\n", text.find_first_of(" \t\n", ++pos)) )
    ++count;

也许不像Neil的解决方案那么短,但是除了已经使用的解决方案之外,没有占用任何空间和额外的分配。

票数 2
EN

Stack Overflow用户

发布于 2010-04-19 10:05:16

使用一个标记器(如one 列于第7.3节 )将向量中的字符串拆分为单个单词(或重写它,以便它只返回令牌的数量),并在向量上循环以计数所遇到的令牌的总数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2666325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档