2013-11-28 4 views
1

Я имею строковыйКак принимать реверс строки

string s1="5 2 13 * +" //as prefix expression. 

Я хочу, чтобы получить обратные вышеприведенную матрицу, как это.

"+ * 13 2 5"

Я попытался stringstream, но это сделать "+ * 31 2 5" и я потерял "13" и я получает "31". Это нехорошо мои вычисления.

Как я могу это сделать? За помощь спасибо.

+0

@juanchopanza "13" все равно будет отменено, не так ли? –

+2

@BitFiddlingCodeMonkey глупо меня, я все время думаю, что названия вопросов означают что-то. – juanchopanza

+2

Похоже, вы не хотите менять «строку». У вас есть двумерный массив, такой как [["5"], ["2"], ["13"], ["*"], ["+"]] и вы хотите изменить внешний массив. Надеюсь, что тоже ответит на ваш вопрос :-) – rnk

ответ

4

Предполагая, что вы хотите отменить в Обл и разделители между значениями являются пробельные символы:

stringstream ss(str); 
string answer, current; 
answer.clear(); 
while (ss >> current) answer = current + " " + answer; 
answer.erase(answer.size()-1, 1);  // eliminate space in the end of answer 
+0

возвращение товара с собой такой же цепочка. не отменено. ? – burakim

+0

@burakim Извините, у меня была ошибка. Я отредактировал свой ответ с новым кодом, который вы можете попробовать. – yasen

+0

Спасибо, последний отредактирован правильно и очень просто. :) – burakim

1

Другой способ

std::string s = "5 2 13 * +"; 
    std::forward_list<std::string> lst; 
    std::istringstream is(s); 

    for (std::string t; std::getline(is, t, ' ');) lst.push_front(t); 
    s.clear(); 

    for (std::string t : lst) s += t + ' '; 

    std::cout << "s = " << s << std::endl; 

Или без станд :: GetLine

std::string s = "5 2 13 * +"; 
    std::forward_list<std::string> lst; 
    std::istringstream is(s); 

    while (is >> s) lst.push_front(s); 

    s.clear(); 
    for (std::string t : lst) s += t + ' '; 

    std::cout << "s = " << s << std::endl; 
Смежные вопросы