【问题标题】:C++ Read an input fileC++ 读取输入文件
【发布时间】:2023-04-04 11:20:01
【问题描述】:

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

所以输入文件包含:

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 但我不知道如何分隔其他字符串。

希望你能帮帮我!

【问题讨论】:

  • 您使用并行数组而不是结构的数组(或向量)是否有原因?
  • bc 这是用于虚拟内存模拟,我必须读取是写入还是读取以及页数和我的第一个程序就是这样,而不是从文件中读取,所以我可以看看是否它有效,但如果有更好的方法欢迎

标签: c++ file input iostream


【解决方案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);
}

您还可以使用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数组并加载字符;浪费时间重新加载数据缓存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多