atoi函數原型


 一.atoi()函數的功能:

   1.定義: 將字符串轉換成整型數,跳過前面的空格字符,直到遇上數字或正負號才開始做轉換,而再遇到非數字或字符串時('\0')結束轉化,並將結果返回(返回轉換后的整型數)。

   2.頭文件: #include <stdlib.h>

   3.函數原型:int atoi(const char *nptr);

4.實現時需要注意的問題:
(1)檢查字符串是否為空,為空則返回
(2)對空格和規定字符的處理, 若是,則跳過,不影響接下來的處理(很多人的處理忘了規定字符這回事..)
規定字符 具體作用
\n 換行
\f 清屏並翻頁
\r 回車
\t 制表符









  結果仍然為11

   (3)正負號(+-)的處理

(4)結束條件:遇到非數字或者字符'\0'結束
(5)溢出處理,正溢出返回int上限(2147483647),負溢出返回int下限
int main(void) { char *a="-2147483650";
int b=atoi(a); printf(" %d",b); return 0; }
輸出結果為-2147483648
 
        
    char *a="2147483649"; int b=atoi(a); printf(" %d",b); return 0;
輸出結果為2147483647

   代碼如下:

#include<stdio.h> 
#include<iostream> using namespace std; enum error{correct,incorrect,overflow,null}; int error=correct;//默認是正確的 int myatoi(const char *str) { int flag=1; if(str==NULL) { error=null; return 0; } while(*str==' '||*str=='\t'||*str=='\f'||*str=='\r'||*str=='\n') str++; if(*str=='-')//負數的處理,直接讓計算得出的數乘-1即可 { flag=-1; str++; } else if (*str=='+')//注意對正負號我用的不是循環,正負號只有作為第一個字符出現才是合法的 str++; int num=0; while(*str!='\0')//*str=='\0'也是結束條件之一 { if(*str>='0'&&(*str<='9')) { num=num *10+*str-'0';//注意是‘0‘
     //溢出處理稍后貼上
str
++; } else { error=incorrect;//非法 break; } } return num*flag; } int main() { char str[30]; printf("請輸入字符串:"); gets(str); int result = myatoi(str); switch(error){ case correct: cout << "字符串" << str << " 對應的整數是:" << result <<endl; break; case null: cout << "空指針錯誤" <<endl; break; case incorrect: cout << "輸入的字符串中有非數字字符" <<endl; cout << result <<endl; break; case overflow: cout << "輸入的字符串對應的數字使得Int類型溢出" <<endl; cout << result <<endl; } return 0; }

 

 

 

 

 

 

 

     

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM