int Str2Int(const char *str, int *out)
{
quint8 *sym = (quint8 *)str;
quint8 * num_op = (quint8 *)str;
quint8 carry_bit_count = 1;
quint8 num_count = 0;
int ret = 0;
*out = -0x7fffffff;
bool is_find = false;
for(;*num_op != '\0'; ++num_op){
if(*num_op >= ASCII_ZERO && *num_op <= ASCII_NINE){
ret = ret * 10 + *num_op - ASCII_ZERO;
carry_bit_count *= 10;
if(ret < 0)
return (quint64)num_op - (quint64)str + 1;
++num_count;
is_find = true;
if(*(num_op + 1) < ASCII_ZERO || *(num_op + 1) > ASCII_NINE){
break;
}
}
}
if(is_find){
if((quint64)num_op - (quint64)str > num_count){
sym = num_op - num_count;
}
if(*sym == ASCII_SYM_DEC) {
*out = -ret;
} else {
*out = ret;
}
}
return (quint64)num_op - (quint64)str + 1;
}
void FilterIntNum(const QString &str, QList<QString> &strNums, QList<QString> &strContents)
{
int out;
std::string strTemp = str.toStdString();
for(unsigned int i = 0; i < strTemp.size();){
unsigned int offset = Str2Int(strTemp.c_str() + i, &out);
if(out != -0x7FFFFFFF){
strNums.append( QString("%1").arg(out) );
strContents.append(QString(strTemp.substr(i, offset - strNums.last().size()).c_str()));
}else{
strContents.append(QString(strTemp.substr(i, offset).c_str()));
}
i += offset;
}
}