Ответ 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
}
Я знаю, что это просто, я просто не могу вспомнить лучший способ сделать это.
У меня есть вход вроде " 5 15 "
, который определяет x и y двумерного векторного массива.
Мне просто нужны эти два числа в int col
и int row
.
Какой лучший способ сделать это? Я занимался строкой, но не могу найти правильный код.
Спасибо за любую помощь!
Вы можете сделать это, используя 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
}
С++ 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 и т.д.) для преобразования целых чисел в зависимости от используемого компилятора.
Здесь stringstream
способ:
int row, col;
istringstream sstr(" 5 15 ");
if (sstr >> row >> col)
// use your valid input
Предполагая, что вы уже подтвердили, что вход действительно в этом формате, тогда
sscanf(str, "%d %d", &col, &row);
Я лично предпочитаю способ C, который должен использовать sscanf()
:
const char* str = " 5 15 ";
int col, row;
sscanf(str, "%d %d", &col, &row); // (should return 2, as two ints were read)