国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

模擬實現庫函數atoi

2019-11-08 03:04:30
字體:
來源:轉載
供稿:網友

模擬實現庫函數atoi,將字符串轉換成數字。

庫函數atoi函數原型:int atoi(const char *str ); 

該函數在平時我們經常應用,但對該函數內部的一些判斷缺少深刻的了解。

如果我們直接按最基本的功能完成此函數則代碼如下(沒有任何錯誤判斷):

int my_atoi(const char* str){	long long num = 0;	while (*str != '/0')  	{			        num = num * 10 + (*str - '0');			str++;			}	return (int)num;   }此函數能完成如“1234”這類字符串的轉換,但是若輸入“-1234”便不能識別。

缺點: 1、不能判斷正負;

2、不能越過空格;

3、若返回0,不能分清是非法字符還是字符串本身是0;

4、沒判斷參數字符指針是否合法。

所以我們要解決以上的缺點,需要修改和優化并得到以下代碼:

#include<stdio.h>#include<stdlib.h>#include<ctype.h>enum START{	KVALID,    //0 合法	KINVALID   //1 非法};enum START start = KVALID;   //定義全局變量,方便其他函數檢測狀態int my_atoi(const char* str){	start = KINVALID;	long long num = 0;	if (str != NULL && *str != '/0')	{		int flag = 1;   //正負標志位		if (*str == '+')		{			str++;		}		else if (*str == '-')		{			str++;			flag = -1;		}		while (*str != '/0')   //循環到字符串結尾結束(正常退出)		{			if (isdigit(*str))			{				num = num * 10 + flag * (*str - '0');				if (num > INT_MAX || num < INT_MIN)  //判斷是否溢出(以整型為溢出標準)				{					num = 0;					return (int)num;   //此時返回0,且在非法狀態(溢出)				}				str++;			}			else if (isspace(*str))			{				str++;    //將空格跳過			}			else			{				break;  //若遇到0到9外的其他字符,跳出循環(非法狀態)			}			if (*str == '/0')			{				start = KVALID;  //正常轉換完,狀態置成合法			}		}	}	return (int)num;   //此時返回0,狀態不確定}int main(){	char* str = "-   012@3";	int x = my_atoi(str);	PRintf("%d/n",x);	return 0;}輸出結果:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陆丰市| 景东| 余庆县| 浙江省| 民丰县| 潮州市| 神池县| 凭祥市| 云霄县| 柳河县| 越西县| 扶风县| 库尔勒市| 呼伦贝尔市| 中西区| 乌拉特前旗| 洪江市| 红原县| 鄱阳县| 连城县| 井研县| 金昌市| 怀集县| 锡林浩特市| 那坡县| 九江市| 永清县| 东乡族自治县| 栖霞市| 莱州市| 韶山市| 双峰县| 玛纳斯县| 山丹县| 南陵县| 拉萨市| 岚皋县| 吉木萨尔县| 仙游县| 阳朔县| 汨罗市|