字符串操作第一个问题~~~~~~字符串与整数之间的转换
字符串与整数之间的转换需要考虑的一些问题:
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; }
时间: 2024-12-22 00:45:45