2015-06-05 2 views
1

Я пытаюсь написать набор номера в stringstream, глядя, как это:Выровнять строку с тиром в станде :: stringstream

SOME_TEXT 12-23-43 SOME_OTHER_TEXT 

12-23-43 три числа разделено тиром ('- '), цифры могут составлять 1 или 2 цифры (например, 1-2-3 или 12-1-47, так что длина всего набора отличается). Весь набор должен быть выровнен влево и принимать ровно 12 символов, включая пробелы. Когда я пытаюсь применить std :: left манипулятор, он работает только для первого числа. Как мне это сделать?

+0

применяется 'зОго :: левый' перед каждым термином? – Kvothe

+0

Решена ли ваша проблема? – Caduchon

ответ

-1

Вот пример использования другого ostringstream:

#include <iostream> 
#include <sstream> 
#include <iomanip> 

int main() 
{ 
    std::ostringstream oss1; 
    oss1 << 5 << "-" << 31 << "-" << 6; 
    std::ostringstream oss; 
    oss << "SOME_TEXT " << std::setw(12) << std::left << oss1.str() << "SOME_OTHER_TEXT"; 
    std::cout << oss.str() << std::endl; 
    return 0; 
} 
+0

Получил 0xfffffd7ffc8029e8 вместо 1-96-4. sprintf работал, хотя, похоже, это некачественно. –

+0

Каков ваш код? Это работает для меня. Я редактировал, чтобы показать полный пример. – Caduchon

+0

Почему downvoting? Что не так ? – Caduchon

-1

Понял работу с Sprintf, я удивлен, хотя это не может быть сделано с stringstream:

char buffer[12]; 
sprintf(buffer, "%d-%d-%d", n1, n2, n3);    
output << std::setw(12) << std::left << buffer; 
+0

Вы смешиваете стили C и C++. Вы не можете сделать это, если хотите напечатать объекты вместо чисел. – Caduchon

+0

Ну, я могу делать все, что захочу, в прошлый раз, когда я проверил. Серьезно, предложите что-то лучшее, истинное стили C++, я прошу вас. До сих пор ничего не работало. –

+0

Мой ответ с другим ostringstream работает хорошо. Не для тебя ? – Caduchon

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