C语言 atoi 函数解析
生活随笔
收集整理的這篇文章主要介紹了
C语言 atoi 函数解析
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 前言
- atoi函數(shù)的介紹
- atoi函數(shù)的使用
- atoi函數(shù)的自我實(shí)現(xiàn)
- 附:C++完整無缺版自我實(shí)現(xiàn)
- 寫在最后
前言
- 對于atoi函數(shù)大家可能會有些陌生,不過當(dāng)你選擇并閱讀到這里時,請往下閱讀,我相信你能對atoi函數(shù)熟悉
- 該函數(shù)的頭文件為 <stdlib.h> 或 <cstdlib>
atoi函數(shù)的介紹
此函數(shù)的功能是將數(shù)字字符的字符串轉(zhuǎn)化為字面上的整型返回,例如:
char arr[] = "1234"; 將”1234“ -> 1234(int)以下是函數(shù)原型:
要注意的點(diǎn):
- 如果字符串從開頭就有連續(xù)的空格字符,則跳過這些連續(xù)的空格字符,找到不是空格的字符。
- 如果跳過這些空格字符后的第一個字符不是數(shù)字字符,則直接返回0;
- 如果跳過這些空格字符后的第一個字符是數(shù)字字符,則從這個數(shù)字字符開始轉(zhuǎn)換,并向后找連續(xù)的數(shù)字字符轉(zhuǎn)換 ,如果連續(xù)中斷,找到不是數(shù)字字符的字符,則在此截?cái)鄬ふ?#xff0c;返回前面已經(jīng)轉(zhuǎn)換好的連續(xù)的數(shù)字字符字面整型值。(這里截?cái)嘞蚝髮ふ液?#xff0c;不管后面有沒有數(shù)字字符函數(shù)都不管)
- 如果字符串首元素不是空格字符
- 如果第一個字符不是數(shù)字字符,直接返回0。
- 如果第一個字符是數(shù)字字符, 則從這個數(shù)字字符開始轉(zhuǎn)換,并向后找連續(xù)的數(shù)字字符轉(zhuǎn)換 ,如果連續(xù)中斷,找到不是數(shù)字字符的字符,則在此截?cái)鄬ふ?#xff0c;返回前面已經(jīng)轉(zhuǎn)換好的連續(xù)的數(shù)字字符字面整型值。
- 如果字符串全部為空格字符,返回0;如果為空字符串,返回0;
atoi函數(shù)的使用
- 有了上面的介紹,使用的意圖變得明顯,使用起來也就隨手就來了。
例如:
#include <stdio.h> #include <stdlib.h>int main() {char a[] = "";char b[] = " ";char c[] = "66666";char d[] = " @. 66ab";char e[] = " 6666@qq.com";char f[] = "520hehe";char g[] = "i love you 555";printf("%d\n", atoi(a));printf("%d\n", atoi(b));printf("%d\n", atoi(c));printf("%d\n", atoi(d));printf("%d\n", atoi(e));printf("%d\n", atoi(f));printf("%d\n", atoi(g));return 0; }看上的結(jié)果,是不是就與介紹當(dāng)中的點(diǎn)都對應(yīng)起來了呢?
atoi函數(shù)的自我實(shí)現(xiàn)
有了上面的鋪墊,我們已經(jīng)了解了該函數(shù)的特性,所以接下來的實(shí)現(xiàn)也就變的簡單了
附:C++完整無缺版自我實(shí)現(xiàn)
前面C語言實(shí)現(xiàn)的atoi函數(shù)不夠嚴(yán)謹(jǐn),這里用c++實(shí)現(xiàn)嚴(yán)謹(jǐn)?shù)腶toi函數(shù)
class Solution { public:int myAtoi(string s) {int flag = 1; // 操作正負(fù)數(shù)reverse(s.begin(), s.end()); // 先逆置while (s.size() > 1 && s.back() == ' ') s.pop_back(); // 除去前導(dǎo)‘0’ ,如果全是‘0’保留一個‘0’返回if (s.back() == '-') flag = -flag, s.pop_back(); // 利用flag來控制正負(fù)情況else if (s.back() == '+') s.pop_back();if (s.back() < 48 || s.back() > 57) return 0; // 前面的工作完成后開始判斷第一個位置是不是數(shù)字字符long long ret = 0; // 怕存爆整型while (s.size() > 0){// 這一步如果存的時候就已經(jīng)超過了int最大或小于最小,直接返回最大或最小if ((int)ret != ret) if (ret * flag < 0) return INT_MIN;else return INT_MAX;if (s.back() >= 48 && s.back() <= 57){// 每操作一次就刪除那個數(shù)字字符ret = ret * 10 + (s.back() - '0');s.pop_back();}else{// 找到第一個不是數(shù)字字符就跳出break;}}ret *= flag;if ((int)ret != ret)if (ret < 0) return INT_MIN;else return INT_MAX;else return (int)ret;} };寫在最后
相信你已經(jīng)對這個函數(shù)了如指掌了,認(rèn)識掌握的函數(shù)越多,當(dāng)然是沒有壞處只有好處的。經(jīng)過對atoi函數(shù)的學(xué)習(xí),我相信你也會感覺到這個函數(shù)有好處也有缺陷,不過得用且用吧,在用的時候一定要腦子清醒,不要到頭來罵這個函數(shù),哈哈哈哈。
感謝閱讀本小白的博客,錯誤的地方請嚴(yán)厲指出噢!
總結(jié)
以上是生活随笔為你收集整理的C语言 atoi 函数解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天猫京东凡客 简析三类B2C模式
- 下一篇: wingdings字体符号在哪_wing