字符串相关操作————笔试内容之字符串操作

字符串操作第一个问题~~~~~~字符串与整数之间的转换


字符串与整数之间的转换需要考虑的一些问题:

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;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值