字符串操作第一个问题~~~~~~字符串与整数之间的转换
字符串与整数之间的转换需要考虑的一些问题:
1、空字符串""和只有一个正好或者负号的情况应该都考虑到。如“ + ”后面没有东西
2、同时正整数的最大值是 0X7FFF FFFF,最小的负整数是0x8000 0000,因此需要分为两种情况来分别判断整数是否发生上溢和下溢。
下面是个关于字符串转换成整数的操作代码:
#include<stdio.h>
#include<stdlib.h>
enum Status {kValid=0,kInvalid};
int g_nStatus = kValid;//利用全局变量来记录反馈回来的整数是否有效
long long StrToIntCore(const char* digit, int minus){
long long num =0;
while(*digit != '\0'){//如果没有读到末尾则继续循环
if(*digit >='0' && *digit <='9'){
int flag = minus ? -1 : 1;
num = num * 10 + flag*(*digit - '0');//对于多位的字符串的操作如“123”这种字符串如何换成整数的操作
if((!minus && num > 0x7FFFFFFF) ||
(minus && num <(signed int ) 0x80000000)){
num = 0;
break;//如果移除则退出循环
}
digit++;
}else{
num =0;//如果不是数字则反馈回来的数字为0
break;//退出while循环
}
}
if(*digit == '\0'){
g_nStatus = kValid;
}
return num;
}
int StrToInt(const char *str){
g_nStatus = kInvalid;
int minus=0;
long long num = 0;
if(str != NULL && *str !='\0'){
if(*str =='+'){
str ++;
}else if(*str=='-'){//如果是符号
str ++;
minus = 1;
}
//对于+ - 符号后面为空的时候也进行的处理
if(*str !='\0'){
num = StrToIntCore(str,minus);
}
}
return (int)num;
}
int main(){
char * p;
p ="123567";
int m = StrToInt(p);
printf("%d",m);
system("pause");
return 0;
}