在下面给出的代码中,我试图从cin中获取字符串输入,但是它显示了一些运行时错误。
int main(){
int t;
cin>>t;
while(t--){
string s,pat;
cin>>s>>pat;
int q;
cin>>q;
vector<pair<int,char> > queries;
for(int i=0;i<q;i++){
cin>>queries[i].first;
cin>>queries[i].second;
}
cout<<s<<endl;
cout<<pat<<endl;
}
return 0;}
所以我用getline而不是像cin这样的cin:
getline(cin,s);
getline(cin,pat);
它显示了类似的输出
abcde
输入
2 abcde bc 3 0 p 1 q 2 w wxyz cde 2 0 t 1 z
所以在我看来,getline在t之后占用空间,该空间存储在第一个测试用例的字符串s中,而第一个字符串(即“ abcde”)存储在字符串pat中,我不知道为什么它显示为空第二个测试用例的行。
所以要摆脱t之后的多余空间,我添加了一个额外的字符串来存储该空间,就像:
int main(){
int t;
cin>>t;
string z;
getline(cin,z);
while(t--){
string s;
getline(cin,s);
string pat;
getline(cin,pat);
cout<<s<<endl;
cout<<pat<<endl;
}
return 0;
}
它适用于输入
2 abcde bc wxyz cde
但是当我添加此代码
string s,pat;
getline(cin,s);
getline(cin,pat);
int q;
cin>>q;
vector<pair<int,char> > queries;
for(int i=0;i<q;i++){
cin>>queries[i].first;
cin>>queries[i].second;
}
它显示运行时错误。请帮忙。
答案 0 :(得分:0)
这将解决您遇到的问题。正如上面的评论中提到的,您有一个空向量,并且正在尝试访问该向量的元素。您需要创建一对,然后将其推入向量中:
for(int i=0;i<q;i++){
int v;
char c;
cin>> v >> c;
queries.push_back(make_pair(v, c));
}
要进一步说明实际问题是什么,可以将向量视为壁橱,您可以在壁橱中放置一系列盒子。将每个盒子放在壁橱中时,会分配一个编号(索引)。除非您在壁橱中放置一个盒子,否则壁橱是空的。它具有存储箱子的潜力,但是那里没有箱子。当您编写queries[i]
行时,您实际上是在走到壁橱里,寻找一个带有特定索引的盒子,然后试图在其中放一些东西。但是,在您的情况下,您所拥有的只是一个空壁橱,因此当您尝试将某些东西放入盒子(例如,盒子编号0)时,找不到盒子,并且您收到此运行时错误。为了要求一个带有特定索引的盒子,它必须存在并且在壁橱中。我所做的代码更改是实际创建盒子,然后将其放入壁橱中。