Как читать каждое число индивидуально из строк при чтении из файла - PullRequest
1 голос
/ 18 апреля 2019

Требуется руководство по чтению чисел из файла и настройке каждого отдельного числа из строк для настройки функций.

Я прочитал файл и смог распечатать числа на экране, ноЯ сталкиваюсь с некоторым пониманием того, как я смогу распечатать использование этих чисел для конкретной функции, которую я хочу использовать.Например, у меня есть

string line;
while(getline(file,line)){
    cout<<line<<"\n";
}
/* What the file is and what it prints out onto the screen
  3 6
  2 3 2
  2 1 6
  2 1 4
  1 2 3
  1 1 2
  2 1 8
 */

Например, я хочу использовать 3 и 6 для такой функции, как

create_list(int x, int y){}

Inдругими словами, каждый набор чисел в каждой строке будет представлять ввод для некоторых функций

1 Ответ

1 голос
/ 18 апреля 2019

Парсинг переменного числа целых чисел из строки ввода

Из вопроса, что вы пытаетесь сделать, не ясно.Как уже упоминалось в комментариях, вы можете анализировать каталог файлов, используя 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";
  }
}
...