Разбиение массива символов на строки - PullRequest
0 голосов
/ 23 декабря 2011

Это продолжение моего предыдущего вопроса.

Разбор имен файлов из массива символов

Ответ был актуален, но у меня все еще есть проблема.Когда строки разбиты, я не могу заставить их правильно выводить данные в журнал ошибок в виде строки или cstring, и, честно говоря, я не совсем понимаю, как работает его ответ.Так же у кого-нибудь есть дальнейшее объяснение ответа джентльмена?Как бы я разбил массив символов на большее количество строк, а не просто записал их все.Это был ответ.

std::istringstream iss(the_array);
std::string f1, f2, f3, f4;
iss >> f1 >> f2 >> f3 >> f4;

Представьте, что у меня 30 разных строк.Конечно, я не могу написать f1, f2 .... f30.

Любой совет, как это сделать?

1 Ответ

3 голосов
/ 23 декабря 2011

Вы можете даже избежать явного для циклов и попробовать более естественный для современного C ++ способ, если хотите.

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
#include <iterator>

int main()
{
   // Your files are here, separated by 3 spaces for example.
   std::string s("picture1.bmp   file2.txt   random.wtf   dance.png");

   // The stringstream will do the dirty work and deal with the spaces.
   std::istringstream iss(s);

   // Your filenames will be put into this vector.
   std::vector<std::string> v;

   // Copy every filename to a vector.
   std::copy(std::istream_iterator<std::string>(iss),
    std::istream_iterator<std::string>(),
    std::back_inserter(v));

   // They are now in the vector, print them or do whatever you want with them!
   for(int i = 0; i < v.size(); ++i)
    std::cout << v[i] << "\n";
}

Это очевидный способ справиться со сценарием типа «У меня есть 30строки».Храните их все где-нибудь, возможно, подойдет std :: vector, в зависимости от того, что вы можете сделать с именами файлов.Таким образом, вам не нужно давать каждой строке имя (f1, f2, ...), вы можете просто ссылаться на них по индексам вектора, если необходимо, например.

...