Как извлечь конкретные целые числа в смешанной строке-строки в C ++

0

Я читаю текстовый файл в c++, это пример некоторых строк в нем:

remove 1 2 cost 13.4

Как я мог игнорировать все вещи, кроме двух целых чисел после удаления, "1" и "2" и поместить их в две целые переменные?

мой неполный код:

ifstream file("input.txt");
string line;
int a, b;

if(file.is_open())
{
   while (!file.eof())
   {
      getline (file, line);
      istringstream iss(line);
      if (line.find("remove") != string::npos)
      {     

          iss >> a >> b;      // this obviously does not work, not sure how to
                              // write the code here
      }
   }

}
  • 0
    Я увидел !file.eof() и !file.eof() странный шум.
  • 0
    да, я скопировал фреймворк кода из другого места, у него могут быть проблемы, как вы сказали, но это не важно, у меня есть другой вопрос
Теги:
string

1 ответ

1
Лучший ответ

Вот несколько вариантов:

  1. Используйте stringstream созданный для строки, чтобы найти токен remove и проанализировать следующие два целых числа. Другими словами, замените это:

    if (line.find("remove") != string::npos)
    {     
    
        iss >> a >> b;      // this obviously does not work, not sure how to
                            // write the code here
    }
    

    с этим:

    string token;
    iss >> token;
    
    if (token == "remove")
    {
        iss >> a >> b;
    }
    
  2. Создайте stringstream для остальной части строки (6 - длина маркера "удалить").

    string::size_type pos = line.find("remove");
    
    if (pos != string::npos)
    {     
        istringstream iss(line.substr(pos + 6));
    
        iss >> a >> b;
    }
    
  3. Вызовите метод seekg в строке stringstream чтобы установить индикатор позиции ввода потока после маркера "удалить".

    string::size_type pos = line.find("remove");
    
    if (pos != string::npos)
    {     
        iss.seekg(pos + 6);
    
        iss >> a >> b;
    }
    
  • 0
    Большое спасибо, это здорово и работает. но у меня есть другие строки, которые не имеют удаления, они похожи просто "4 5". что я должен сделать для их сохранения?
  • 0
    @Omid Я добавил другие варианты, чтобы добиться того же. Я бы порекомендовал вариант № 3.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню