字符串转换成整数

时间:2023-01-03 19:01:47

【原创】字符串转换成整数

pongo网的一道小题目,试着用c++写了下,全为兴趣...

// test.cpp : 定义控制台应用程序的入口点。
// editor: Visual C++ 2010 express
// system: win7 x32
// create: 2013-06-17 16:00PM
// author: jiang kejun <jinhua_k9@163.com>

#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

int reverse(int x);
int StrToInt(string c);
int _tmain(int argc, _TCHAR* argv[])
{
StrToInt("");
StrToInt("1");
StrToInt("+1");
StrToInt("-1");
StrToInt("123");
StrToInt("-123");
StrToInt("010");
StrToInt("+00131204");
StrToInt("-01324000");
StrToInt("2147483647");
StrToInt("-2147483647");
StrToInt("-2147483648");
StrToInt("2147483648");
StrToInt("-2147483649");
StrToInt("abc");
StrToInt("-abc");
StrToInt("1a");
StrToInt("23a8f");
StrToInt("-3924x8fc");
StrToInt(" 321");
StrToInt(" -321");
StrToInt("123 456");
StrToInt("123 ");
StrToInt(" - 321");
StrToInt(" +4488");
StrToInt(" + 413");
StrToInt(" ++c");
StrToInt(" ++1");
StrToInt(" --2");
StrToInt(" -2");

scanf_s("%d", 0);
return 0;

}

int StrToInt(string ls)
{
if(ls.empty()) return 0;
// rs
int i=0,ret=0;
// 标记 + or -
int minus=0;
while(i<ls.length())
{
// space
if(ls.at(i)==' '){
if(minus){
ret=0;
break;
}
if(ret){
break;
}
i++;
continue;
}
// + | -
if(ls.at(i)=='+' || ls.at(i)=='-'){
if(minus){
ret=0;
break;
}
minus = ls.at(i);
i++;
continue;
}
// 0-9 isdigit
if(ls.at(i) >= '0' && ls.at(i)<='9'){
// => int
int par = (ls.at(i) - '0');
// overflow
if((minus == '+' || !minus) && (par > INT_MAX - ret*10))
{
ret = INT_MAX;
break;
}
else if((minus == '-') && (par-1 > INT_MAX - ret*10))
{
ret = INT_MIN;
break;
}
ret = ret * 10 + par;
i++;
}else{
ret = ret?ret:0;
break;
}
}
ret = (minus=='-')?-ret:ret;

cout<<ls<<" => "<<ret<<endl;
return 0;
}
要求效果如下:

字符串转换成整数