странный вывод getline (cin, str) - PullRequest
0 голосов
/ 07 октября 2018

В приведенном ниже коде я пытался получить строковый ввод из 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, как:

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

показывает ошибку во время выполнения.Пожалуйста, помогите ..

1 Ответ

0 голосов
/ 07 октября 2018

Это решит проблему, которую вы видите.Как упоминалось в комментарии выше, у вас есть пустой вектор, и вы пытаетесь получить доступ к элементу вектора.Вам нужно создать пару, а затем вставить ее в вектор:

for(int i=0;i<q;i++){
    int v;
    char c;
    cin>> v >> c;
    queries.push_back(make_pair(v, c));
}

Чтобы добавить дальнейшие объяснения к реальной проблеме, вы можете представить свой вектор как шкаф, в который вы можете поместить сериюкоробок.Каждому ящику присваивается номер (индекс), когда он помещается в шкаф.Пока вы не поместите коробку в шкаф, шкаф пуст.У него есть потенциал для хранения коробок, но там нет коробок.Когда вы написали строку queries[i], вы, по сути, шли к шкафу и искали ящик с определенным индексом, а затем пытались что-то в него поместить.В вашем случае, однако, все, что у вас было, это пустой шкаф, поэтому, когда вы пытались положить что-то в ящик (например, ящик номер 0), ящик не был найден, и вы получили эту ошибку времени выполнения.Чтобы попросить ящик с определенным индексом, он должен существовать и находиться в шкафу.Внесенный мною код должен был создать коробку и поместить ее в шкаф.

...