конвертировать строку в int использовать sstream

Мы хотим преобразовать строку в int, используя sstream.

Но мы не знаем, что наша строка имеет целое число или нет, например, это может быть «привет 200» и мы хотим 200 в этом, или это может быть «Привет» и там было нет решения!

У меня есть этот код, когда у нас есть только целое число в строке:

inline int string_to_int(string s)
{
stringstream ss(s);
int x;
ss >> x;
return x;
}

Теперь, если s = «привет 200!» или s = «привет», как мы можем это сделать?

3

Решение

Простая возможность, которая игнорирует неверные входные данные до первого целого числа в строке:

bool string_to_int(string str, int &x)
{
istringstream ss(str);

while (!ss.eof())
{
if (ss >> x)
return true;

ss.clear();
ss.ignore();
}
return false; // There is no integer!
}
4

Другие решения

Напишите синтаксический анализатор на основе конечного автомата и исправьте любой ввод, как вы хотите:

int extract_int_from_string(const char* s) {
const char* h = s;
while( *h ) {
if( isdigit(*h) )
return atoi(h);
h+=1;
}
return 0;

}

int i = extract_int_from_string («привет 100»);

1

 //You can use the following function to get the integer part in your string...
string findDigits(string s){
string digits="";
int len=s.length();
for(int i=0;i<len;i++){
if(s.at(i)>='0' && s.at(i)<='9')
digits+=s[i];}
return digits;}

// and call the above function inside this function below...
int string_to_int(string s){
string digits=findDigits(s);
stringstream ss(digits);
int x;
ss >> x;
return x;}
0
По вопросам рекламы [email protected]