在C++中从文件读取混合整数和字符

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
最好的方法是如何读取这个文件?
非常感谢您的帮助!

不确定您所说的令牌方法是什么意思。您是想对每一行进行标记化,但失败了吗?那为什么不在这里包含代码的那部分呢? - Pirooz
2个回答

2
我会使用 std::stringstream,并使用std::hex,因为89ab和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>头文件。


是的,你说得对。这对我很有意义。它运行良好。我现在明白该怎么做了。谢谢。 :) - Sista

0

使用

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

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


哦,好的。谢谢。我会试一下的。我不知道我可以这样做。 - Sista

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接