声明:题目来源于《王道》
问题描述:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如,输入字符串“12345”,输出整数“12345”。
解决方法:依次扫描字符串,遇数字就把在之前得到的数字乘以10再加上当前字符串表示的数字。但需考虑特殊情况,即整数可能不仅仅只含有数字,还可能会有“+”、“-”符号来表示数的正负。如果是“+”,则不需要做处理,如果是“-”,则表明此数为负数。接着还要考虑非法输入,若输入的字符串中还有不是数字的字符,则每当遇到这样的字符时就停止转换,还有,若转换结果,溢出,则返回0。
#include <iostream>
#include <algorithm>
using namespace std;
int StrToInt(char* str)
{
long long num = 0;
if (str != NULL)
{
char* digit = str;
bool minus = false; //负数标记位
if (*digit == '+')
{
digit++;
}
else if (*digit == '-')
{
digit++;
minus = true;
}
while (*digit != '\0')
{
if (*digit >= '0' && *digit <= '9') //如果是数字,转
{
num = num * 10 + (*digit - '0');
if (num > numeric_limits<int>::max()) //溢出,返回0,停止转换
{
num = 0;
break;
}
digit++;
}
else //如果有非数字字符,停止转换,返回0
{
num = 0;
break;
}
}
if (*digit == '\0')
{
if (minus)
{
num = 0 - num;
}
}
}
return num;
}
int main()
{
char s[100];
cin >> s;
cout << "字符串为:" << s << endl;
cout << "转换为数字后:" << StrToInt(s) << endl;
return 0;
}