天天看點

模拟實作C庫裡的itoa()函數和atoi()函數

一、函數原型

        兩個函數都在C語言裡的<stdlib.h>庫函數裡。

        int atoi(const char *nptr);将字元串轉換為整型值。

     char* itoa(int vulue,char *str,int base)itoa()函數有3個參數:第一個參數是要轉換的數字,第二個參數是要寫入轉換結果的目标字元串,第三個參是

轉移數字時所用的基數。比如10表示十進制,二表示二進制。

二、模拟實作

1、atoi() C++實作:

#include<iostream>
using namespace std;
int Atoi(const char* str)
{
	int tmp=0;
	const char* ptr=str;//ptr儲存str字元串開頭
	if(*str=='-'||*str=='+')
	{
		str++;
	}
	while(*str!=0)
	{
		if((*str<'0')||(*str>'9'))
		{
			break;
		}
		tmp=tmp*10+(*str-'0');
		str++;
	}
	if(*ptr=='-')
	{
		tmp=-tmp;
	}
	return tmp;
}
int main()
{
	int n=0;
	char p[10]="";
	cin.getline(p,20);
	n=Atoi(p);
	cout<<n<<endl;
	return 0;
}
           

2、itoa()C語言實作:

#include <ctype.h>
#include <stdio.h>
void itoa (int n,char s[]);
int main(void )
{ 
	int n;
	char s[100];
	printf("Input n:");
	scanf("%d",&n);
	printf("the string : ");
	itoa (n,s);
	printf("\n");
	return 0;
}
void itoa (int n,char s[])
{
	int i,j,sign;
	if((sign=n)<0)//記錄符号
	n=-n;//使n成為正數
	i=0;
	do
	{
		s[i++]=n%10+'0';//取下一個數字
	}
	while ((n/=10)>0);//删除該數字
	if(sign<0)
	s[i++]='-';
	s[i]='\0';
	for(j=i;j>=0;j--)//生成的數字是逆序的,是以要逆序輸出
    printf("%c",s[j]);
}