#include <iostream>
#include <assert.h>
#include <stack>
using namespace std;
enum Status{
InValid=0,
Valid
};
int isValid=Valid;
bool isNullOrEmpty(char* &curPos);
int parseInt(char *str){
char *curPos=str;
if(isNullOrEmpty(curPos))
return 0;
bool isNegtive=false;
if(*curPos=='-'){
isNegtive=true;
curPos++;
}else if(*curPos=='+'){
curPos++;
}
if(isNullOrEmpty(curPos))
return 0;
int num=0;
while(*curPos!='\0'){
if(*curPos>='0'&&*curPos<='9'){
num=num*10+(*curPos-'0');
}else{
isValid=InValid;
return 0;
}
curPos++;
}
if(isNegtive)
num=0-num;
return num;
}
bool isNullOrEmpty(char* &curPos){
if(curPos==NULL){
isValid=InValid;
return true;
}
while(*curPos!='\0'&&*curPos==' ')
curPos++;
if(*curPos=='\0'){
isValid=InValid;
return true;
}
return false;
}
void main(){
char* str="123";
int num=parseInt(str);
if(isValid==Valid){
cout<<num<<endl;
}else{
cout<<"error input"<<endl;
}
str="-123";
num=parseInt(str);
if(isValid==Valid){
cout<<num<<endl;
}else{
cout<<"error input"<<endl;
}
str=" a123";
num=parseInt(str);
if(isValid==Valid){
cout<<num<<endl;
}else{
cout<<"error input"<<endl;
}
system("pause");
}