Как мне прочитать только один тип из однострочного файла с несколькими типами? - PullRequest
0 голосов
/ 21 марта 2020

Итак, у меня есть текстовый файл с одной строкой, который выглядит следующим образом:

Стив 3 Сильвия 7 Крейг 14 Лиза 14 Брайан 4 Шарлотта 9 Джордан 6

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

#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;

    int main()
    {
        int a;

        ifstream inStream;
        inStream.open("file.txt");

// case for file open failing
        if ( inStream.fail() )
        {
            cout << "File open failed.\n";
            exit(1);
            }

//attempting to read each integer and print it to see if it worked right
            while( inStream.good() )
            {
                inStream>>a;
                    cout<<a;

             }


         return 0;
     }

Я знаю, что это довольно просто сделать, когда весь файл состоит только из целых чисел или если весь файл не был одной строкой, как бы я У меня проблемы с этим делом

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Основное c регулярное выражение может легко решить проблему

#include <iostream>
#include <regex>
#include <string>

int main(int argc, const char** argv) {
  std::string buf = "Steve 3 Sylvya 7 Craig 14 Lisa 14 Brian 4 Charlotte 9 Jordan 6";
  std::regex all_digit("\\d+");
  std::smatch taken;
  while(std::regex_search(buf, taken, all_digit, std::regex_constants::match_any)) {
    for(auto x : taken)
      std::cout << x << '\n';
    buf = taken.suffix().str();
  }

  return 0;
}

Пожалуйста, адаптируйте приведенный выше код под свои нужды. Переключите строку с буфером, взятым из файла.

1 голос
/ 21 марта 2020

Если вы знаете, что формат будет выглядеть как имя номер имя номер ... тогда вы можете сделать что-то вроде этого:

int a;
string name;
// read name first then number
while( inStream >> name >> a )
{
    cout << a << endl;
}

Вы не можете перепрыгивать через имена при чтении с >> , но вы можете читать их и ничего с ними не делать.

...