Можно ли использовать to_string в цикле с getline?

#c #string #loops #tostring

Вопрос:

У меня есть текстовый файл с образцом текста

 a b c d 
e f g h 
i j k l
 

и я хочу перебрать каждую строку и сохранить ее в виде строки. На данный момент я пытаюсь использовать следующее для цикла:

 ifstream inputFile;
inputFile.open("input.txt");

int totalLines = 3;
for(int i; i < totalLines; i  ){
    getline(inputFile, to_string(i));
}
 

где totalLines равно количеству строк (в данном случае 3), и я хочу присвоить каждой строке соответствующее значение «i», но я получаю эту ошибку:

ошибка: нет соответствующей функции для вызова ‘getline(std::ifstreamamp;, std::строка)’ getline(входной файл, to_string(i));

Есть ли способ исправить это или, возможно, даже лучший способ перебрать несколько строк и назначить их соответствующей строке для последующего использования?

Ответ №1:

В этом нет никакого смысла. std::getline Функция считывает строку в строку lvalue. Строка, возвращаемая пользователем std::to_string , не является значением lvalue, и она не будет волшебным образом хранить все три строки в разных местах.

Просто угадываю здесь, но я думаю, что вы хотите использовать вектор (или массив) строк и установить каждый элемент вектора в строку, которую вы читаете.

Возможно, что-то вроде этого:

 std::vector<std::string> all_lines;
std::string one_line;
while (std::getline(inputFile, one_line))
{
    all_lines.emplace_back(one_line);
}
 

Обратите внимание, что вместо этого я использую while цикл, и что он гарантированно прочитает все строки независимо от того, сколько их в файле (если только нет ошибки, в этом случае чтение прекратится).

Вы можете распечатать строки следующим образом:

 for (auto constamp; l : all_lines)
{
    std::cout << l << 'n';
}
 

Или, если вам нужны номера строк:

 for (unsigned i = 0; i < all_lines.size();   i)
{
    std::cout << "Line #" << i   1 << ": " << all_lines[i] << 'n';
}