Парсинг переменного числа целых чисел из строки ввода
Из вопроса, что вы пытаетесь сделать, не ясно.Как уже упоминалось в комментариях, вы можете анализировать каталог файлов, используя ifstream.Я ленивый и всегда разбираю файлы с getline(<ifstream>, str)
, а затем разбираю строки, используя istringstream.Таким образом, я делаю меньше ошибок.
Одним из вопросов было то, почему у вас несколько длин строк.Неважно, я составлял функции, которые вызывались в зависимости от того, было ли 1, 2 или 3 целых числа для каждой строки ввода.
Самое замечательное в синтаксическом анализе ввода с использованием потока - то, что потоковый процессор можетразбирать целые, двойные числа или что-то еще.
Дайте мне знать, если у вас есть какие-либо вопросы.
#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <vector>
int square(std::vector<int> &ints)
{
return ints[0] * ints[0];
}
int rectangle(std::vector<int> &ints)
{
return ints[0] * ints[1];
}
int volume(std::vector<int> &ints)
{
return ints[0] * ints[1] * ints[2];
}
int main()
{
std::ifstream file;
file.open("example.txt");
std::string str;
while (getline(file, str)) {
int parsed_int;
std::vector<int> ints;
int index = 0;
std::stringstream stream(str);
while (stream >> parsed_int) {
ints.push_back(parsed_int);
++index;
}
int answer = 0;
// index is the number of integers read on this line from the file
switch (index) {
case 0:break;
case 1:answer = square(ints);
break;
case 2:answer = rectangle(ints);
break;
case 3:answer = volume(ints);
break;
default:break;
}
std::cout << "Answer is " << answer << "\n";
}
}