2016-03-08 2 views
1
  1. Привет, я недавно работал с вектором, но кажется, что когда я вводил «3 + 2 + 1» или около того, мой ожидаемый результат был бы " 1 + 2 + 3" консоль говорит: "Terminate вызывается после метания экземпляр 'станд :: out_of_range' исходная задача из:. http://www.codeforces.com/problemset/problem/339/A Что моя проблема Thks за помощь !.
  2. #include <bits/stdc++.h> 
        using namespace std; 
    
        int main(){ 
    
    
    ios_base::sync_with_stdio(false); 
        cin.tie(NULL); 
    
    
    vector <int> a; 
    string str; 
    cin>>str; 
    
        for(int i = 0; i < str.size(); i++){ 
          if(str[i]!='+') 
           { 
            int c = str[i]-'0'; 
            a.push_back(c); 
           } 
        } 
    
    sort(a.begin(), a.end()); 
    cout<<a.at(0); 
         for(int j = 1; j < str.size(); j++){ 
    
          cout<<'+'<<a.at(j); 
    
        } 
    
    
        return 0; 
        } 
    

ответ

1

Вы? необходимо изменить условие остановки цикла для остановки по размеру вектора, а не строки. Поэтому измените свой последний цикл на следующие

for(int j = 1; j < a.size(); j++){ 
    cout<<'+'<<a.at(j); 
} 

Далее, если вы хотите вывести все значения в формате вы указали вы хотели бы сделать следующий

assert(!a.empty()); 
for(int j = 0; j < a.size() - 1; j++){ 
    cout << a.at(j) << '+'; 
} 
cout << a.back() << endl; 

Одна последней вещью, о вашей реализации. Если вам всегда будет задана строка формата «a + b + c + d», вам не нужен вектор для изменения последовательности и печати. Вы можете просто сделать следующее:

std::reverse(str.begin(), str.end()); // #include <algorithm> 

И тогда строка будет иметь нужную вам последовательность. Если вы не хотите, чтобы сделать это на месте, и нужно еще один контейнер можно сделать

// #include <iterator> and #include <algorithm> 
string other_string; 
std::copy(str.crbegin(), str.crend(), std::back_inserter(other_string)); 

^Это будет копировать строку в обратном порядке на другую строку объект.

+0

Отлично, что вы сказали, работало идеально, спасибо большое. У меня есть вопрос: «Какая польза от« assert (! A.empty()) »; –

+0

@ DanielRodríguezMeza Если бы ответ был тем, что вы хотели, можете ли вы его принять и пожалуйста? Вам нужно будет проверить флажок с небольшим оттенком серого цвета рядом с моим ответом. – Curious

+0

Я очень ценю большое спасибо, но не могу понять использование «assert (! A.empty()); –

Смежные вопросы