Мы хотим преобразовать строку в int, используя sstream.
Но мы не знаем, что наша строка имеет целое число или нет, например, это может быть «привет 200» и мы хотим 200 в этом, или это может быть «Привет» и там было нет решения!
У меня есть этот код, когда у нас есть только целое число в строке:
inline int string_to_int(string s)
{
stringstream ss(s);
int x;
ss >> x;
return x;
}
Теперь, если s = «привет 200!» или s = «привет», как мы можем это сделать?
Простая возможность, которая игнорирует неверные входные данные до первого целого числа в строке:
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!
}
Напишите синтаксический анализатор на основе конечного автомата и исправьте любой ввод, как вы хотите:
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»);
//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;}