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

Given an array of words and a string, how can I count all words in a given string

本文关键字:单词 字符串 一个 计算 数组 何计算      更新时间:2023-10-16

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

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

#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-使用map,您将在map中只有一个单词的实例,因此您需要保留每个单词的计数。

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

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