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

89ab と 16ff は 16 進数のように見えるので、std::stringstream, を使用します。std::hex

次のようになります。

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数字とアルファベットの任意の組み合わせである可能性のあるタイプの入力を読み取ることができます。必ずしも入力を 1 行ずつ読み取ってから解析する必要はありません。>>演算子は、スペースと改行の両方を区切り文字と見なします。

于 2011-04-13T21:34:53.303 に答える