不要看我的,由于开始的时候没有看懂题目的要求,导致代码改了又改,简直是面向测试编程,有空我把代码重构一下。
int belong_to(char c,char *mys){
int j;
char *ss = mys;
int slen=0;
slen = strlen(ss);
for(j=0;j < slen;j++){
if(c == ss[j]){
return 1;
}
}
return 0;
}
int myAtoi(char * s){
char use[] = "+- 0123456789\0";//{'+','-',' ','0','1','2','3','4','5','6','7','8','9'};
char hh[] = "0123456789\0";//{'0','1','2','3','4','5','6','7','8','9'};
char tt[] = "+-\0";
int64_t value=0;
int Min = -pow(2,31);
int k;
int Max = pow(2,31) -1 ;
char t[200]= {'\0'};
int slen = strlen(s);
if(slen == 0){
return 0;
}
for(k=0;k<slen;k++){
if(s[k] == ' '){
continue;
}
else{
break;
}
}
int i,j,kk=0,num=0,flag=0,start=0,end=0,tmp;
for(i=k;i<slen;i++){
j = belong_to(s[i],use);
if(j==1){
t[num] = s[i];
printf("si = %c\n",s[i]);
printf("%c\n",t[num]);
num++;
}
if(j==0){
break;
}
if(j==0&&tmp == 1){
break;
}
tmp =j;
}
for(i=0;i<num;i++){
j = belong_to(t[i],hh);
if(j){
start=i;
break;
}
}
if(start > 1){
for(i = 0;i<start;i++){
j = belong_to(s[i],tt);
if(j){
kk++;
}
}
if(kk>=2){
return 0;
}
}
if(k>=1){
if(start -1> 0){
if(t[start-1] = " ")
return 0;
}
}
if(start>0&&t[start-1]=='-'){
flag = 1;
}
printf("statt%d\n",start);
for(i = start;i<num;i++){
j = belong_to(t[i],hh);
if(!j){
end = i-1;
break;
}
else{
end = i;
}
}
printf("end=%d\n",end);
for(i=start;i<=end;i++){
printf("tt%chh\n",t[i]);
switch(t[i]){
case '0':
j = 0;
break;
case '1':
j=1;
break;
case '2':
j=2;
break;
case '3':
j=3;
break;
case '4':
j= 4;
break;
case '5':
j = 5;
break;
case '6':
j = 6;
break;
case '7':
j = 7;
break;
case '8':
j = 8;
break;
case '9':
j = 9;
break;
default:
return 0;
}
if(value >=4294967296){
if(flag){
return Min;
}
else{
return Max;
}
}
value = value*10 +j;
printf("value = %ld",value);
}
if(value > Max){
printf("jjjjj\n");
if(flag){
printf("jjhhhhhhh\n");
return Min;
}
else{
return Max;
}
}
else{
if(flag){
return -(int)value;
}
else
return value;
}
}