#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';
}