Чтение смеси целых чисел и символов из файла в C ++ - PullRequest
5 голосов
/ 14 апреля 2011

У меня проблемы с чтением файла в 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

Как лучше всего читать этот файл?

Заранее большое спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Я бы использовал 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>

0 голосов
/ 14 апреля 2011

Используя

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

, вы можете читать вводы типа std::string, которые могут представлять собой любую комбинацию цифр и букв.Вам не обязательно читать строку за строкой, а затем пытаться ее проанализировать.>> оператор рассматривает и пробел, и символ новой строки как разделители.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...