РЕДАКТИРОВАТЬ: Вторая попытка .. Вот что я написал, чтобы преобразовать значения в вектор. если вектор содержит более одного набора чисел, он печатается и выдает ошибку.
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
int main() {
std::string str = "jump 110 5";
size_t i = 0;
for (; i < str.length(); i++)
{
if (isdigit(str[i]))
break;
}
str = str.substr(i, str.length() - i);
// Parse str to id
std::stringstream sstr;
sstr << str;
std::string tempStr;
std::vector<size_t> id;
while (std::getline(sstr, tempStr, ' '))
{
std::cout << tempStr << std::endl;
id.push_back(std::stoi(tempStr));
}
// print an error if additional numbers are in id
if (id.size() > 1)
{
std::cout << "Error: " << id[1];
}
else
{
std::cout << "You're good";
}
return 0;
}
Внимание: ошибка возникает, если между 110 и 5 больше одного пробела.
Исходный ответ: Если вы хотите, чтобы id
имел значение 110 5
, тогда id не должен быть типом int, потому что он не может содержать пробелов. Если вы хотите, чтобы id имел значение 1105
, вам нужно избавиться от пробелов в строке «110 5» перед присвоением его id
, иначе значение будет усечено при назначении id
. .
Это то, что я сделал, чтобы избавиться от пробелов и сделать id
равным 1105
.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
int main() {
std::string str = "jump 110 5";
size_t i = 0;
for (; i < str.length(); i++)
{
if (isdigit(str[i]))
break;
}
str = str.substr(i, str.length() - i);
// get rid of spaces
std::string tempStr;
for (int i = 0; i < str.length(); i++)
{
if (str[i] != ' ')
{
tempStr.push_back(str[i]);
}
}
// Set the str object to tempStr
str = tempStr;
int id = atoi(str.c_str());
std::cout << id;
return 0;
}
Если вам действительно нужно сохранить id
как int
и разделите 110
и 5
, тогда я бы предложил преобразовать id
в std::vector
и преобразовать строку в вектор.