で入力をスキップしている -cin.getline()私は、次のコードを使用している場合は、getlineのは、(「for」ループの最後の反復のために、それは単にそれをスキップします)最後の入力を取ることはありませんC++
int main()
{
int n;
map<string, set<string> > lst;
string c,s,c2;
cin>>n;
for(int i=0;i<n;i++)
{
getline(cin,c); // here it skips the input for last iteration
stringstream ss;
ss<<c;
bool f=1;
while(ss>>s)
{
if(f)
{
c2=s;
f=0;
}
else
lst[c2].insert(s);
}
}
for (map<string, set<string> >::const_iterator ci = lst.begin(); ci != lst.end(); ++ci)
{
cout<< (*ci).first <<" "<< (*ci).second.size() <<endl;
}
}
これを取り除くには、getlineの後にcin.ignore()を追加します。今、そのすべての入力を取って、私は新しい問題に直面している -
#include<iostream>
#include<string>
#include<map>
#include<set>
#include<sstream>
#include<algorithm>
using namespace std;
int main()
{
int n;
map<string, set<string> > lst;
string c,s,c2;
cin>>n;
for(int i=0;i<n;i++)
{
getline(cin,c);
cin.ignore();
stringstream ss;
ss<<c;
bool f=1;
while(ss>>s)
{
if(f)
{
c2=s;
f=0;
}
else
lst[c2].insert(s);
}
}
for (map<string, set<string> >::const_iterator ci = lst.begin(); ci != lst.end(); ++ci)
{
cout<< (*ci).first <<" "<< (*ci).second.size() <<endl;
}
}
新しい問題がc2をしながら、文字列の最初の文字が削除されるということです。例えば、私がgetlineへの入力として "England Jane Doe"を与えると、c2で "ngland"を得るでしょう。
この問題を解決するにはどうすればよいですか?
'' 'と' 'getline'を混在させることは繊細です。どちらの場合でも、結果を決してチェックしないので、なぜあなたのコードが動作すると期待していますか? –
'(* CI)は[CIN後のgetline(CIN、複数可)を使用して]のCI-> first' –
可能重複('のように読みやすく.first' http://stackoverflow.com/questions/5739937/using-getlinecin -s-after-cin) – alexisdm