您好,登錄后才能下訂單哦!
簡介:
atoi: 是ASCII to integer 的縮寫,是把字符串轉換成整型數的一種函數
atol: 是ASCII to long 的縮寫,是把字符串轉換成長長整型數的一種函數
atoll: 是ASCII to long long 的縮寫,是把字符串轉換成長長整型數的一種函數
atoq: 是一種廢棄的atoll版本, 功能與atoll相似, 因為已經廢棄, 本次不參與代碼實現
代碼實現:
aoti
#include <stdio.h> /* * 自己動用實現atoi * 功能: 將數字字符串轉換成×××并返回 * author sea time 2016/06/15 */ int myatoi(const char* pstr){ //判斷指針是否為空 if(NULL == pstr){ return -1; } //接收指針值, 不改變形參值 const char* p = pstr; //保存結束, 并返回 int retval = 0; //符號, 正數為1, 負數為0 int sign = 1; //跳過前面的空格 while(' ' == *p){ p++; } //判斷正負號 if('-' == *p){ sign = -1; } //如果是符號, 指針后移 if('-' == *p || '+' == *p){ p++; } // while('0' <= *p && '9' >= *p){ //字符0在ascii碼中對應的是48, 所以需要減字符0 //上一次的值乘10, 并加上本次的值 retval = retval * 10 + ((int)(*p)- '0'); //指針后移 p++; } //返回結果 return retval * sign; } int main(int argc, char* argv[]){ //測試結果 char* p = "-123151"; //打印輸出 printf("%s = %d\n", p, myatoi(p)); return 0; }
由于aoti只能實現結果,int32 范圍是: 2147483647 ~ -2147483648, 超出范圍會進行溢出運算
atol:
#include <stdio.h> /* * 自己動用實現atol * 功能: 將數字字符串轉換成長×××并返回 * author sea time 2016/06/15 */ long myatol(const char* pstr){ //判斷指針是否為空 if(NULL == pstr){ return -1; } //接收指針值, 不改變形參值 const char* p = pstr; //保存結束, 并返回 long retval = 0; //符號, 正數為1, 負數為0 int sign = 1; //跳過前面的空格 while(' ' == *p){ p++; } //判斷正負號 if('-' == *p){ sign = -1; } //如果是符號, 指針后移 if('-' == *p || '+' == *p){ p++; } // while('0' <= *p && '9' >= *p){ //字符0在ascii碼中對應的是48, 所以需要減于字符0 //上一次的值乘10, 并加上本次的值 retval = retval * 10 + ((int)(*p)- 48); //指針后移 p++; } //返回結果 return retval * sign; } int main(int argc, char* argv[]){ //測試結果 char* p = "-142222234152654151"; //打印輸出結果 printf("%s = %ld\n", p, myatol(p)); return 0; }
atol的范圍-9223372036854775808到9223372036854775807 超出范圍會進行溢出運算
atoll:
#include <stdio.h> /* * 自己動用實現atoll * 功能: 將數字字符串轉換成長長×××并返回 * author sea time 2016/06/15 */ long long myatoll(const char* pstr){ //判斷指針是否為空 if(NULL == pstr){ return -1; } //接收指針值, 不改變形參值 const char* p = pstr; //保存結束, 并返回 long long retval = 0; //符號, 正數為1, 負數為0 int sign = 1; //跳過前面的空格 while(' ' == *p){ p++; } //判斷正負號 if('-' == *p){ sign = -1; } //如果是符號, 指針后移 if('-' == *p || '+' == *p){ p++; } // while('0' <= *p && '9' >= *p){ //字符0在ascii碼中對應的是48, 所以需要減于字符0 //上一次的值乘10, 并加上本次的值 retval = retval * 10 + ((int)(*p)- 48); //指針后移 p++; } //返回結果 return retval * sign; } int main(int argc, char* argv[]){ //測試結果 char* p = "-922337203685477580888"; printf("%s = %lld\n", p, myatoll(p)); return 0; }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。