Лучший способ получить ints из строки с пробелом?

Я знаю, что это просто, я просто не могу вспомнить лучший способ сделать это. У меня есть вход вроде " 5 15 ", который определяет x и y двумерного векторного массива. Мне просто нужны эти два числа в int col и int row.

Какой лучший способ сделать это? Я занимался строкой, но не могу найти правильный код.

Спасибо за любую помощь!

Ответы

Ответ 1

Вы можете сделать это, используя stringstream:

std::string s = " 5 15 ";
std::stringstream ss(s);

int row, column;
ss >> row >> column;

if (!ss)
{
    // Do error handling because the extraction failed
}

Ответ 2

С++ String Toolkit Library (StrTk) имеет следующее решение вашей проблемы:

int main()
{
   std::string input("5 15");
   int col = 0;
   int row = 0;
   if (strtk::parse(input," ",col,row))
      std::cout << col << "," << row << std::endl;
   else
      std::cout << "parse error." << std::endl;
   return 0; 
}

Дополнительные примеры можно найти Здесь

Примечание. Этот метод примерно в 2-4 раза быстрее, чем стандартные библиотечные подпрограммы и в 120 раз быстрее, чем на основе STL-реализаций (stringstream, Boost lexical_cast и т.д.) для преобразования целых чисел в зависимости от используемого компилятора.

Ответ 3

Здесь stringstream способ:

int row, col;
istringstream sstr(" 5 15 ");
if (sstr >> row >> col)
   // use your valid input

Ответ 4

Предполагая, что вы уже подтвердили, что вход действительно в этом формате, тогда

sscanf(str, "%d %d", &col, &row);

Ответ 5

Я лично предпочитаю способ C, который должен использовать sscanf():

const char* str = " 5 15 ";
int col, row;
sscanf(str, "%d %d", &col, &row); // (should return 2, as two ints were read)