С ++ преобразовать строку в int - PullRequest
1 голос
/ 17 июня 2020

Используется метод stoi () для преобразования строки в int, но он преобразуется в int, даже когда есть alpahabet.

string str1 = "45";
string str2 = "31337 test"; 

int myint1 = stoi(str1); // 45
int myint2 = stoi(str2); // 31337

str2 преобразуется в int, но я не хочу этого преобразования, поскольку он есть алфавит. Если есть способ поймать или предотвратить это преобразование.

Ответы [ 4 ]

3 голосов
/ 17 июня 2020

Вы можете проверить количество обработанных символов.

string str2 = "31337 test"; 
std::size_t num;

int myint2 = stoi(str2, &num); // 31337
//                      ^^^^

// num (the number of characters processed) would be 5
if (num != str2.length()) {
    ...
}
2 голосов
/ 17 июня 2020

Вы можете использовать функции потоков, чтобы прочитать число и убедиться, что в потоке больше ничего нет.

std::string        str = "31337 test"; 
std::stringstream  stream(str);

int   val;
char  x;
if ((stream >> val) && !(stream >> x)) {
    // We read an integer from the stream.
    // **and** there is nothing else on the stream
    // (except white space)
}

Полезно, так как вы также можете использовать его с любой конкретной базой:

if ((stream >> std::setbase(8) >> val) && !(stream >> x)) {
    // We read an integer from the stream.
    // **and** there is nothing else on the stream
    // (except white space)
}
0 голосов
/ 17 июня 2020

Если я вас правильно понял, вы не хотите, чтобы преобразование происходило, если в строке присутствуют другие числа.

в этом случае вы можете использовать ниже

int convertOnlyWhenNumbersPresentInString( std::string str ){

    if (std::all_of( str.begin(), str.end(), ::isdigit ))
    {
        return std::stoi( str );

    } else
    {
        return -1;
    }  
}

int main() 
{

    std::string str1 = "45";
    std::string str2 = "31337 test";

    std::cout << convertOnlyWhenNumbersPresentInString( str1 ) << std::endl; // prints 45
    std::cout << convertOnlyWhenNumbersPresentInString( str2 ) << std::endl; // prints -1
}
0 голосов
/ 17 июня 2020

Со справочной страницы stoi

string str2 = "31337 test"; 
string::size_type sz;   // alias of size_t
int myint2 = stoi(str2,&sz);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...