您好,登錄后才能下訂單哦!
這篇文章主要介紹“C語言中atoi函數(shù)模擬如何實現(xiàn)”,在日常操作中,相信很多人在C語言中atoi函數(shù)模擬如何實現(xiàn)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言中atoi函數(shù)模擬如何實現(xiàn)”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
int atoi ( const char * str );
功能:將字符串轉(zhuǎn)換為整數(shù)。
解析C字符串str,將其內(nèi)容解釋為一個整數(shù),該整數(shù)作為int值返回。
該函數(shù)首先丟棄盡可能多的空白字符,直到找到第一個非空白字符。然后,從這個字符開始,取一個可選的初始加號或減號,后面跟著盡可能多的數(shù)字,并將它們解釋為一個數(shù)值。 例:" -123456" 轉(zhuǎn)換為 -123456
字符串可以在構(gòu)成整數(shù)的字符之后包含其他字符,這些字符將被忽略,并且對該函數(shù)的行為沒有影響。例:" 123abc456" 轉(zhuǎn)換為 123,雖然最終的輸出結(jié)果是一個整數(shù),但這屬于非法轉(zhuǎn)換
如果str中的第一個非空白字符序列不是有效的整數(shù),或者由于str為空或只包含空白字符而不存在這樣的序列,則不執(zhí)行轉(zhuǎn)換。例:“abc” " abc" “” 為非法轉(zhuǎn)換,最終會輸出整數(shù)0。
字符串 | 整數(shù) | 合法性 |
---|---|---|
" 123456" | 123456 | 合法 |
“-123456” | -123456 | 合法 |
“123abc456” | 123 | 非法 |
“abc” | 0 | 非法 |
“” | 0 | 非法 |
“2222222222” | 任意值 | 非法 |
注:當轉(zhuǎn)換的值超出int可表示值的范圍時會發(fā)生什么,沒有標準規(guī)范。
例:在VS2013編譯環(huán)境下輸出的數(shù)值
#include <stdio.h> #include <limits.h> #include <ctype.h> //通過枚舉設置兩種狀態(tài),分別代表字符串轉(zhuǎn)換的合法性 enum Status { VALID, //合法 INVALID //非法 }; enum Status status = INVALID; //定義全局變量 status 為 INVALID,若轉(zhuǎn)換合法,則將 status 變?yōu)?nbsp;VALID,若非法則不變 int my_atoi(const char* str) { if (str == NULL) //字符串為空 { return 0; } if (*str == '\0') //空白字符 { return 0; } while (isspace(*str)) //字符串前面有多余的空格,則一直往后移尋找符號或數(shù)字 { str++; } int flag = 0; //flag 標志數(shù)字的正負 if (*str == '+') { flag = 1; str++; } else if (*str == '-') { flag = -1; str++; } long long ret = 0; while (isdigit(*str)) { ret = ret * 10 + flag*(*str - '0'); if (ret<INT_MIN || ret>INT_MAX) //判斷轉(zhuǎn)換后的數(shù)字是否越界 { return 0; } str++; } if (*str == '\0') //若字符串遍歷完就走這一步,也就意味著該字符串的轉(zhuǎn)換為合法的 { status = VALID; return (int)ret; } else //非法轉(zhuǎn)換 { return (int)ret; } } int main() { //int ret = my_atoi("-123"); int ret = my_atoi(" -2222222222"); if (status == VALID) { printf("合法的轉(zhuǎn)換:%d\n", ret); } else printf("轉(zhuǎn)換不合法!返回值為:%d\n",ret); return 0; }
到此,關(guān)于“C語言中atoi函數(shù)模擬如何實現(xiàn)”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。