Лучший способ получить целые из строки с пробелами? - PullRequest
14 голосов
/ 12 апреля 2010

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

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

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

Ответы [ 5 ]

16 голосов
/ 12 апреля 2010

Библиотека C ++ String Toolkit (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 и т. Д.) Для преобразования строки в целое число - в зависимости от используемого компилятора, конечно.

10 голосов
/ 12 апреля 2010

Вы можете сделать это, используя 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 голосов
/ 12 апреля 2010

Вот способ stringstream:

int row, col;
istringstream sstr(" 5 15 ");
if (sstr >> row >> col)
   // use your valid input
0 голосов
/ 12 апреля 2010

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

sscanf(str, "%d %d", &col, &row);
0 голосов
/ 12 апреля 2010

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

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