您的位置:首页 > 其它

把字符串转换成整数

2016-11-06 19:46 197 查看
代码:

#include <iostream>

using namespace std;

enum STATUS
{
STATUS_VALID = 0,
STATUS_INVALID
};
int g_nStatus = STATUS_VALID;

int StrInt(const char*, int);

int StrToInt(const char* str)
{
long long num = 0;
g_nStatus = STATUS_INVALID;
int minus = 0;      //正负号标记
if (str != nullptr && *str != '\0')
{
if (*str == '+')
{
str++;
}
else if (*str == '-')
{
str++;
minus = true;
}

if (*str != '\0')       //有效字符
{
num = StrInt(str, minus);
}
}
return num;
}
int StrInt(const char* str, int minus)
{

long long num = 0;
while (*str != '\0')
{
int flag = minus ? -1 : 1;
if (*str >= '0' && *str <= '9')
{
num = num * 10 + flag*(*str - '0');
if ((!minus && num > 0x7FFFFFFF) || (minus && num < (signed int)0x80000000))
{
num = 0;
break;
}
str++;
}
else
{
num = 0;
break;
}
}

if (*str == '\0')
{
g_nStatus = STATUS_VALID;
}
return (int)num;
}

int main()
{
cout << StrToInt(NULL);
cout << " g_nStatus: " << g_nStatus << endl;
/*
注:不能使用cout<< StrToInt(NULL) << " g_nStatus: " << g_nStatus << endl;
因为在StrToInt(NULL)中可能会修改g_nStatus,不同编译器对连续多个输出 处理的时候优先级不同,这里会输出0 g_nStatus: 0,下同
*/

cout << StrToInt("");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("123");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("+123");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("-123");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("1a33");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("+0");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("-0");
cout<< " g_nStatus: " << g_nStatus << endl;

//有效的最大正整数, 0x7FFFFFFF
cout << StrToInt("+2147483647");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("-2147483647");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("+2147483648");
cout<< " g_nStatus: " << g_nStatus << endl;

//有效的最小负整数, 0x80000000
cout << StrToInt("-2147483648");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("+2147483649");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("-2147483649");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("+");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << StrToInt("-");
cout<< " g_nStatus: " << g_nStatus << endl;

cout << endl;
system("pause");
return 0;
}


测试:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: