atoi函數的實作源碼:
#include <iostream>
using namespace std;
enum status{invalid=0,valid};
bool result_status=invalid;//最後最為輸入是否違法的辨別
int strToInt(const char* str)
{ long long num=0;
bool minus=false;
if(str!=NULL && *str!='\0')//如果不是空指針或者字元串内容不是空“”,那麼就執行後面的
{
if('+'==*str)
{
str++;
}
else
if('-'==*str)
{
minus=true;
}
while('\0'!=*str)
{
if('0'<=*str&&'9'>=*str)
{
num=num*10+(*str)-'0';
if((minus==false)&&(num>0x7FFFFFFF)||(minus==false)&&(num>0x8FFFFFFF))//超過整數的最大範圍終止
{
num=0;
break;
}
str++;
}
else//出現非法字元時也終止
{
num=0;
break;
}
}
}
if('\0'==*str)//如果是因為遇到'\0'退出循環,那麼說明輸入正确
{
if(minus)
{
num=0-num;
}
result_status=valid;
}
return (int)num;
}
int main()
{
char *str="123456";
int num=strToInt(str);
if(result_status==valid)
{
cout<<num<<endl;
}
else
{
cout<<"input invalid"<<endl;
}
system("pause");
}
itoa函數的實作源碼:
char *myitoa(int num,char *str,int radix) {
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmLyMTN2YGO0IWZkNjZxUjZhNzYlVTYhdzNiFTZjZWZ3EmNjZzNmVWM58CXiFzM1kzMwITZ2QjZ3EjN0ATN5U2N4E2MhNWO5MmYjVTPudWaz9CXwIjMENTJz9CXltWahJ2Lc12bj5SdklWYi5ycvR3boBXao5yYvw1LcpDc0RHaiojIsJye.jpg)
itoa流程圖
char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; unsigned unum; if(radix==10&&num<0) { unum=(unsigned)-num; str[i++]='-'; } else unum=(unsigned)num; do
C語言程式
{ str[i++]=index[unum%(unsigned)radix]; unum/=radix; }while(unum); str[i]='\0'; if(str[0]=='-') k=1; else k=0; char temp; for(j=k;j<=(i-k-1)/2;j++) { temp=str[j]; str[j] = str[i-1+k-j]; str[i-j-1]=temp; } return str; }