2015-08-20 6 views
0

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

Как конвертировать std::list<int> в список std::string в виде запятой?

Предположим, этот сегмент кода в рамках:

#include <list> 
#include <string> 

void parseFile() 
{ 
    std::list<int> skippedLines; 
    // ...parse file... 
    if (!skippedLines.empty()) { 
     const std::string skippedLinesAsString = ??? 
     log << "Skipped lines: " << skippedLinesAsString; 
    } 
} 

Пожалуйста, обратите внимание, что мне нужно std::string как результат. Показанный поток предназначен только для иллюстрации и не может использоваться для вывода.

Я реализовал его традиционным способом, используя петлю. Но я уверен, что есть простое алгоритмическое решение, использующее вставку или подобное.

+0

@Yakk На самом деле я использую 'QList ', который является библиотекой std, совместимой. – Flovdis

+5

http://stackoverflow.com/questions/1430757/c-vector-to-string http://stackoverflow.com/questions/5689003/how-to-implode-a-vector-of-strings-into-a- string-the-elegant-way http://stackoverflow.com/questions/5223066/converting-int-to-string-in-c http://stackoverflow.com/questions/2518979/how-to-transform-a- vectorint-in-a-string http://stackoverflow.com/questions/8581832/converting-a-vector-to-string – user4581301

+1

Я бы придерживался цикла записи в строковый поток, потому что он легко читаем и обслуживаем. Вы также можете посмотреть на boost, в котором есть много хороших инструментов. –

ответ

1

Удивительно, но для этого нет хорошего алгоритмического решения. Общее решение будет использовать зЬй :: stringstream и ostream_iterator, следующим образом:

std::ostringstream str; 
std::copy(l.begin(), l.end(), std::ostream_iterator(str, ", "); 

Проблема заключается в том, что последний элемент в строке будет заканчиваться delimter, «» в этом случае. Поэтому вам нужно будет сделать это в цикле, если вы хотите, чтобы строка была правильной.

Вы также можете создать что-то по строкам std :: accumulate и лямбда, но, честно говоря, петля будет более удобочитаема.

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