给定一个单词数组和一个字符串,我如何计算给定字符串中的所有单词

问题描述 投票:0回答:1

给定一个单词数组和一个字符串,我需要计算给定字符串中存在的所有单词。

我已经拆分了句子,并将单词包含在哈希图中。但是,当我遍历字符串数组以检查该单词是否存在时,得到的输出不正确。我该如何纠正代码?

#include<bits/stdc++.h> 
using namespace std; 
void countwords(string str,string words[],int n )
{
    map<string ,bool > m1;  //map 
    map<string ,bool > ::iterator it; 
    int i=0,cnt=0; 
    string temp = " "; 
    while(i<str.size()) // splitting of sentence into words
    {
        while(str[i]!=' '&&i<str.size()&&str[i]!='.') // if it doesnt encounter space, add it to temp
        {
            temp+=str[i]; 
            i++; 
        }
        m1[temp]=true;  // insert temp into map
        temp=" "; 
        i++; 
    }

    for(i=0;i<n;i++)
    { 
        if(m1.find(words[i])!=m1.end()&&m1[words[i]]==true) // if word is present in the map increment count & it isn't a duplicate
        {    
            cnt++; 
            m1[words[i]]=false;
         } 
     } 
     cout<<cnt; 
}
c++ string hash
1个回答
0
投票

您的代码存在一些问题。

1- temp =“”,您需要将temp设置为空字符串,否则find()函数将无法正常工作

2-使用地图,地图中只有一个单词实例,因此您需要对每个单词进行计数。

下面的代码计算并打印给定数组的单词数,对代码的更改最少:

void countwords(string str,string words[],int n ){
map<string ,int > m1;
int i=0, cnt=0;
string temp = "";
while(i < str.size())
{
    while(str[i]!=' ' && i<str.size() && str[i]!='.')
    {
        if(str[i]!=' ' && str[i]!='.')
            temp+=str[i];
        i++;
    }
    auto iii = m1.find(temp);
    int count = 0;
    if(iii != m1.end())
        count = iii->second;
    count+=1;
    m1[temp]=count;

    temp="";
    i++;
}

for(int i=0; i != n; i++)
{
    auto found = m1.find(words[i]);
    if(found != m1.end())
        std::cout << found->first << " " << found->second << std::endl;
    else cout << words[i] << " " << "0" << std::endl;
}}
© www.soinside.com 2019 - 2024. All rights reserved.