题目详情:
输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345。
请完成函数StrToInt,实现字符串转换成整数的功能。
友情提醒:
提交代码之前,请复查下你的程序,比如当给的字符串是如左边图片所示的时候,有考虑到么?
当然,它们各自对应的正确输出如右边图片所示(假定你是在32位系统下,编译环境是VS2008以上)
------------------------------------------分割线------------------------------------------------------
这道题比较简单,需要注意的是当字符串表示的置超出了int的表示范围(-2147483648~2147483647)的时候,取int的上界\下界值。
C++代码如下:
#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <tchar.h>
using namespace std;
int StrToInt(const char* str){
int len=strlen(str);
bool findFlag=false;
bool findDig=false;
long long res=0;//字符串对应的值可能超出int的表示范围,所以这里用long long,最后再转换为int
int sign=1;
for(int i=0;i<len;++i){
if(str[i]<='9'&&str[i]>='0'){
findDig=true;
res*=10;
res+=str[i]-48;
}else if(str[i]=='-'){
if(!findFlag&&!findDig){
findFlag=true;
sign=-1;
}else break;
}else if(str[i]=='+'){
if(!findFlag&&!findDig){
findFlag=true;
sign=1;
}else break;
}else if(str[i]==' '){
if(!findFlag&&!findDig)
continue;
else
break;
}else {
break;
}
}
res*=sign;
//注意字面值常量后面的LL,否则会被认为是int导致溢出
if(res<=-2147483649LL)
res=-2147483648;
else if(res>=2147483648LL)
res=2147483647;
//error
/*if(res==-2147483649){
std::cout<<"-----"<<res<<std::endl;
res=-2147483648;
}else if(res==2147483648)
res=2147483647;
*/
return res;
}
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
int main(){
int a=(int)((long long)(-1));
std::cout<<"a="<<a<<std::endl;
std::cout<<StrToInt("")<<std::endl;
std::cout<<StrToInt("1")<<std::endl;
std::cout<<StrToInt("+1")<<std::endl;
std::cout<<StrToInt("-1")<<std::endl;
std::cout<<StrToInt("123")<<std::endl;
std::cout<<StrToInt("-123")<<std::endl;
std::cout<<StrToInt("010")<<std::endl;
std::cout<<StrToInt("+00131204")<<std::endl;
std::cout<<StrToInt("-01324000")<<std::endl;
std::cout<<StrToInt("2147483647")<<std::endl;
std::cout<<StrToInt("-2147483647")<<std::endl;
std::cout<<StrToInt("-2147483648")<<std::endl;
std::cout<<StrToInt("2147483648")<<std::endl;
std::cout<<StrToInt("-2147483649")<<std::endl;
//std::cout<<std::endl;
std::cout<<StrToInt("abc")<<std::endl;
std::cout<<StrToInt("-abc")<<std::endl;
std::cout<<StrToInt("1a")<<std::endl;
std::cout<<StrToInt("23a8f")<<std::endl;
std::cout<<StrToInt("-3924x8fc")<<std::endl;
std::cout<<StrToInt(" 321")<<std::endl;
std::cout<<StrToInt(" -321")<<std::endl;
std::cout<<StrToInt("123 456")<<std::endl;
std::cout<<StrToInt("123 ")<<std::endl;
std::cout<<StrToInt(" - 321")<<std::endl;
std::cout<<StrToInt(" +4488")<<std::endl;
std::cout<<StrToInt(" + 413")<<std::endl;
std::cout<<StrToInt(" ++c")<<std::endl;
std::cout<<StrToInt(" ++1")<<std::endl;
std::cout<<StrToInt(" --2")<<std::endl;
std::cout<<StrToInt(" -2")<<std::endl;
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。
时间复杂度是:O(length)