C语言之atoi实现(五十六)

1.返回值是long long 类型

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
#include <iostream>

long long my_atoi(char *str){
	long long result = 0;
	int flag = 1;	
	
	while (*str != '\0'){
		
		if(*str == '-'){
			flag = -1;
			str++;
		}
		
		while(*str == '+'){
			flag = 1;
			str++;
		}

		while(*str == ' '){
			str++;
		}

		
		if(*str >= '0' && *str <= '9')
			result = result * 10 + ( *str - '0');
		else
			break;
		
		str++;
	}


	return result * flag;
}


int main(){
	char *str = "++++23 3442324323 42    fghi";
	long long ret = 0;
	
	//base
	// while(*str >= '0' && *str <= '9'){
	// 	ret = ret*10 + (*str - '0');
	// 	str++;
	// }


	ret = my_atoi(str);
	printf("ret = %ld\n",ret);
}

2.返回值是int类型

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int my_atio(char *str){
	int flag = 1;
	int ret = 0;

	while(*str != '\0'){
		if(*str == '-'){
			str++;
			flag = -1;
		}

		if(*str == ' ')
			str++;

		if(*str == '+')
			str++;

        if(*str > '9')
			str++;     

		if(*str >= '0' && *str <= '9'){
			ret = ret * 10 + (*str - '0');
			str++;
		}
			
	}

    //做个限制:int类型范围:1<<31 -1 -----  -(1<<31)
	if(ret > (1<<31 -1) || ret < (-(1<<31)))
		return 0;
	
	return ret * flag;
}

int main(){
	char *str = "12345674444444444444444444444";
	int ret = my_atio(str);
	printf("ret = %d\n",ret);
	return(0);
}

猜你喜欢

转载自blog.csdn.net/u010164190/article/details/124945508
今日推荐