заполнение строкового вектора текстом с разделителями табуляции

Я очень плохо знаком с C ++.

Я пытаюсь заполнить вектор элементами из файла с разделителями табуляции. Какой самый простой способ сделать это?

Спасибо!

-2

Решение

Там может быть много способов сделать это, простой поиск Google даст вам решение.

Вот пример из одного из мои проекты. Оно использует getline и читать файл, разделенный запятыми (CSV), я позволю вам изменить его для чтения файла с разделителями табуляции.

ifstream fin(filename.c_str());
string buffer;

while(!fin.eof() && getline(fin, buffer))
{
size_t prev_pos = 0, curr_pos = 0;
vector<string> tokenlist;
string token;
// check string
assert(buffer.length() != 0);

// tokenize string buffer.
curr_pos = buffer.find(',', prev_pos);

while(1) {

if(curr_pos == string::npos)
curr_pos = buffer.length();

// could be zero
int token_length = curr_pos-prev_pos;

// create new token and add it to tokenlist.
token = buffer.substr(prev_pos, token_length);
tokenlist.push_back(token);

// reached end of the line
if(curr_pos == buffer.length())
break;

prev_pos = curr_pos+1;
curr_pos = buffer.find(',', prev_pos);
}
}

ОБНОВЛЕНИЕ: улучшено в то время как состояние.

0

Другие решения

Это, вероятно, самый простой способ сделать это, но подход vcp может быть более эффективным.

std::vector<string> tokens;
std::string token;
while (std::getline(infile, token, '\t')
{
tokens.push_back(token);
}

Готово. Вы можете фактически сократить это до трех строк кода с помощью входной итератор и задняя вставка, но почему?

Теперь, если файл разрезан на строки и разделен вкладками на этих строках, вам также придется обрабатывать разделители строк. Теперь вы просто делаете вышеупомянутое дважды, один цикл для строк и внутренний цикл для разбора вкладок.

std::vector<string> tokens;
std::string line;
while (std::getline(infile, line)
{
std::stringstream instream(line)
std::string token;
while (std::getline(instream, token, '\t')
{
tokens.push_back(token);
}
}

А если вам нужно было сделать строку, то вкладки, то … я не знаю … цитаты? Три петли. Но если честно, к трем я, наверное, смотрю конечный автомат. Я сомневаюсь, что ваш учитель хочет что-то подобное на данном этапе.

0

По вопросам рекламы [email protected]