bool isspace(char c)
{
if(c==' '||c=='\t' ||c=='\n'||c=='\v'||c=='\f'||c=='\r')
return true;
return false;
}
bool StrToInt(char *str,int &num)
{
if(!str)
return false;
while(isspace(*str)) //跳过前面空格,比如“ 123”,则输出123
++str;
bool minusSign=false; //正负号标志位
if (*str=='-') //判断跳过空格后是否有正负号
{
minusSign=true;
++str;
}
else if(*str=='+')
{
++str;
}
if(!(*str>='0' && *str<='9')) //判断下一个字符是否是数字,如果不是,返回false,比如“ + 123”则返回fasle
return false; //也就是如果有+-号,则+-号后面必须是数字,否则是无效输入
while(*str!='\0') //提取字符串中数字,也就是“ 123abc”这种情况算合法输入,输出123
{
if (*str>='0' && *str<='9')
{
num=num*10+(*str-'0');
}
else
{
break;
}
str++;
}
if(minusSign) //如果是负数,也可以num=(-1)*num;只不过减法效率高
num=0-num;
return true;
}
void main()
{
char* str=" -1235a5bc555"; //测试用例" -1235a5bc555"," -",""," ","123abc", " 123 456"
int num=0;
if(StrToInt(str,num))
cout<<num<<endl;
else
cout<<"Invalid Input!"<<endl;
}
注:本程序将" -123 456"、“ 123abc”这种情况当做了合法输入,只提取第一部分数字。