C ++ Читать входной файл - PullRequest
       15

C ++ Читать входной файл

0 голосов
/ 13 ноября 2018

У меня проблемы с чтением файла и сохранением значений.

Итак, входной файл содержит:

3 5

W2 R3 W3 R4

И что я хочу, это:

F = 3

P = 5

char Ac [] = {'W', 'R', 'W', 'R'};

int acc [] = {2,3,3,4};

У меня уже есть F = 3 и P = 5, но я не знаю, как отделить другие строки.

Надеюсь, вы мне поможете!

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете читать символ за символом, пропуская пробелы.

Или вы можете прочитать строку, а затем разбить строку:

std::string  rw_text;
std::vector<char> Ac;
std::vector<int>  acc;
//...
while (input_file >> rw_text)
{
  const char letter = rw_text[0];
  const int number = rw_text[1] - '0';
  Ac.push_back(letter);
  acc.push_back(number);
}

Вы также можете использовать struct, чтобы объединить ваши буквы и цифры, например pair.

struct Letter_Number
{
  char letter;
  int  number;
  friend std::istream& operator>>(std::istream& input, Letter_Number& ln);
};

std::istream& operator>>(std::istream& input, Letter_Number& ln)
{
  input >> ln.letter;
  input >> ln.number;
  return input;
}

//...
std::vector<Letter_Number> database;
Letter_Number ln;
//...
while (input_file >> ln)  
{
  database.push_back(ln);
}

Структура будет хранить буквы, связанные с их номерами. В параллельном массиве вы можете иметь разные смещения, иначе пара не выстроится в линию.

Кроме того, имея структуру, буква и число будут находиться в одной строке кэша данных процессора, поэтому ваша программа будет более эффективной. В противном случае процессор должен будет загрузить массив Ac, получить значение, затем загрузить массив acc и загрузить символ; тратить время на перезагрузку кеша данных.

...