5

我在用 C++ 读取文件时遇到了一些麻烦。我只能阅读整数或字母。但我无法同时阅读,例如 10af、ff5a。我的程序如下:

int main(int argc, char *argv[]) {

if (argc < 2) {
    std::cerr << "You should provide a file name." << std::endl;
    return -1;
}

std::ifstream input_file(argv[1]);
if (!input_file) {
    std::cerr << "I can't read " << argv[1] << "." << std::endl;
    return -1;
}

std::string line;
for (int line_no = 1; std::getline(input_file, line); ++line_no) {
    //std::cout << line << std::endl;

         -----------
    }
       return 0;
 }

所以我想要做的是,我允许用户指定他想要读取的输入文件,并且我正在使用 getline 来获取每一行。我可以使用标记的方法来只读取整数或只读取字母。但我无法同时阅读两者。如果我的输入文件是

2 1 89ab

8 2 16ff

阅读此文件的最佳方法是什么?

非常感谢您的帮助!

4

2 回答 2

2

我会使用std::stringstream, 并使用std::hex89ab 和 16ff 看起来像十六进制数字。

应该是这样的:

std::string line;
for (int line_no = 1; std::getline(input_file, line); ++line_no)
{
    std::stringstream ss(line);
    int a, b, c;

    ss >> a;
    ss >> b;
    ss >> std::hex >> c;
 }

您将需要#include <sstream>

于 2011-04-13T21:35:56.800 回答
0

使用

std::string s;
while (input_file >> s) {
  //add s to an array or process s
  ...
}

您可以读取类型的输入,std::string它可以是数字和字母的任意组合。您不一定需要逐行读取输入然后尝试解析它。>>运算符将空格和换行符视为分隔符。

于 2011-04-13T21:34:53.303 回答