5 votes

Lecture d'un mélange d'entiers et de caractères dans un fichier en C++.

J'ai des problèmes avec la lecture d'un fichier en C++. Je suis capable de lire uniquement des entiers ou uniquement des alphabets. Mais je ne suis pas capable de lire les deux, par exemple, 10af, ff5a. Ma procédure est la suivante :

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;
 }

Ce que j'essaie de faire, c'est de permettre à l'utilisateur de spécifier le fichier d'entrée qu'il veut lire, et d'utiliser getline pour obtenir chaque ligne. Je peux utiliser la méthode des jetons pour lire uniquement des entiers ou uniquement des alphabets. Mais je ne suis pas capable de lire un mélange des deux. Si mon fichier d'entrée est

2 1 89ab

8 2 16ff

Quelle est la meilleure façon de lire ce fichier ?

Merci beaucoup d'avance pour votre aide !

2voto

Marlon Points 11528

J'utiliserais un std::stringstream et utiliser std::hex puisque 89ab et 16ff ressemblent à des nombres hexagonaux.

Cela devrait ressembler à ça :

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;
 }

Vous devrez #include <sstream>

0voto

Pirooz Points 486

Utilisation de

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

vous pouvez lire les entrées de type std::string qui peut être une combinaison quelconque de chiffres et d'alphabets. Vous n'avez pas nécessairement besoin de lire l'entrée ligne par ligne et d'essayer de l'analyser. >> considère l'espace et le saut de ligne comme des délimiteurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X