C++ 读取输入文件

C++ Read an input file

提问人:Zeta Zav 提问时间:11/13/2018 最后编辑:CommunityZeta Zav 更新时间:11/13/2018 访问量:234

问:

我在读取文件和保存值时遇到问题。

因此,输入文件包含:

0 伏

W2 R3 W3 R4

我想要的是这个:

F = 3

P = 5

字符 Ac[] = {'W','R','W','R'};

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

我已经有了 F = 3 和 P = 5,但我不知道如何分离其他字符串。

我希望你能帮助我!

C++ 文件 输入 IOTream

评论

0赞 Thomas Matthews 11/13/2018
您是否有理由使用并行数组而不是结构体的数组(或向量)?
0赞 Zeta Zav 11/13/2018
bc 这是用于虚拟内存模拟的,我必须读取是写入还是读取和页数,我的第一个程序就是这样,而不是从文件中读取,所以我可以看到它是否有效,但如果有更好的方法欢迎

答:

0赞 Thomas Matthews 11/13/2018 #1

您可以逐个字符读取,跳过空格。

或者你可以读一个字符串,然后拆分字符串:

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);
}

您还可以使用 a 将字母和数字放在一起,例如 .structpair

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);
}

结构将使字母与其编号相关联。在并行数组中,您可以有不同的偏移量,否则该对不会对齐。

此外,通过具有结构,字母和数字将位于处理器的同一数据缓存行上,因此您的程序将更有效率。否则,处理器将不得不加载到数组中,获取值,然后加载到数组中并加载字符;浪费时间重新加载数据缓存。Acacc