给定一个单词数组和一个字符串,我需要计算给定字符串中存在的所有单词。
我已经拆分了句子,并将单词包含在哈希图中。但是,当我遍历字符串数组以检查该单词是否存在时,得到的输出不正确。我该如何纠正代码?
#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;
}
您的代码存在一些问题。
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;
}}