Попробуйте это с помощью C++ 11 std::stoi
:
char c_str[] = "[51,53]";
std::string s(c_str);
int num1 = std::stoi(s.substr(1, 2));
int num2 = std::stoi(s.substr(4, 2));
Если вы знаете, что номера будут находиться за пределами диапазона 10-99
затем использовать это вместо того, чтобы:
char c_str[] = "[5156789,5]";
std::string s(c_str);
s.assign(s.substr(1, s.size() - 2)); // Trim away '[' and ']'
std::string::size_type middle = s.find(','); // Find position of ','
int num1 = std::stoi(s.substr(0, middle));
int num2 = std::stoi(s.substr(middle + 1, s.size() - (middle + 1)));
Функция stoi
выбросит std::invalid_argument
если номер не может быть проанализирован.
Edit:
Для более rubust решение, которое будет только синтаксический анализ BASE-10 номера, вы должны использовать что-то вроде этого:
char c_str[] = "[51,0324]";
int num1, num2;
try {
std::string s(c_str);
s.assign(s.substr(1, s.size() - 2));
std::string::size_type middle = s.find(',');
std::unique_ptr<std::size_t> pos{new std::size_t};
std::string numText1 = s.substr(0, middle);
num1 = std::stoi(numText1, pos.get()); // Try parsing first number.
if (*pos < numText1.size()) {
throw std::invalid_argument{{numText1.at(*pos)}};
}
std::string numText2 = s.substr(middle + 1, s.size() - (middle + 1));
num2 = std::stoi(numText2, pos.get()); // Try parsing second number.
if (*pos < numText2.size()) {
throw std::invalid_argument{{numText2.at(*pos)}};
}
} catch (const std::invalid_argument& e) {
std::cerr << "Could not parse number" << std::endl;
std::exit(EXIT_FAILURE);
}
Это отбросит std::invalid_argument
при попытке разобрать строки как "1337h4x0r"
и т.п., в отличие от использования std::istringstream
. Se this for more info
«они находятся в c_str» Это не делает Если вы назначаете std :: string другой std :: string, вызов c_str бесполезен. – SirDarius
Обратите внимание, что 'c_str()' является просто функцией-членом 'std :: string', которая возвращает char *, который содержит символы строки. – JBL
Да, вы правы. Поскольку я читал их из файла, у меня уже была эта строка там string buffertm; tmfile >> buffertm; string pairstring = buffertm.c_str(); – dorien