文字列がstd::string str(s);
あり、 s には次のような単語のリストがあります
s="one two three one one two..."
そして、各単語の出現と、最大出現値を持つ最後の単語が必要です。
私は発生タイプを宣言しました:
typedef std::unordered_map<std::string> occurrences;
occurrences s1;
のコンテンツを に代入したいのですがs
、s1
どうすればいいですか?
その後、いくつかの間違いがある各単語の出現を取得するコードは次のとおりです。
for (std::unordered_map<std::string, int>::iterator it = s1.begin();
it != s1.end();
++it)
{
std::cout << "word :" << it->first << "occured " << it->second << " times \n";
}
ここで「one」、「two」という各単語の出現を取得する方法を教えてもらえますか?
リクエストに応じて、ここに元のコードを追加しています。
#include <string>
#include <iostream>
#include <unordered_map>
int main()
{
typedef std::unordered_map<std::string,int> occurrences;
occurrences s1;
s1.insert(std::pair<std::string,int>("Hello",1));
s1.insert(std::pair<std::string,int>("Hellos",2));
for (std::unordered_map<std::string, int>::iterator it = s1.begin();it != s1.end();++it)
{
std::cout << "word :" << it->first << "occured " << it->second << " times \n";
}
return 0;
}
改善されたコード:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <unordered_map>
int main()
{
typedef std::unordered_map<std::string,int> occurrences;
occurrences s1;
// the string we're splitting.
std::string s = "one two three one one two";
int maxcount=0,temp=0;
std::vector<std::string> vestring;
// create an input string stream
std::istringstream iss(std::move(s));
// now simply extract strings until you reach end-of-file.
while (iss >> s)
{
temp=++s1[s];
if(temp>=maxcount)
{
maxcount=temp;
vestring.push_back(s);
}
}
for (occurrences::const_iterator it = s1.cbegin();it != s1.cend(); ++it)
std::cout << it->first << " : " << it->second << std::endl;;
return 0;
}