일자 리 를 찾 는 '정수 가 문자열 로 바 뀌 었 습 니 다 - itoa 구현'

2121 단어 c일 하 다실현
정수 가 문자열 로 바 뀌 면 itoa 함수 (http://www.cplusplus.com/reference/cstdlib/itoa/), 예 를 들 어 123 을 입력 하면 문자열 '123' 을 얻 을 수 있 습 니 다.그래도 간단 한 편 인 데, 스스로 실현 하 는 것 이 비교적 재미있다.
/***************
     
****************/
void convIntToStr(int n)
{
	int signFlag = 0;
	char str[10];
	int bitsNum = 0;
	int i = 0;

	if(n < 0)
	{
		signFlag = 1;
		 n = -n;
	}

	for( ; ;)
	{
		unsigned int quotient = 0;
		unsigned int remainder = 0;
		
		
		quotient = n / 10;
		remainder = n % 10;
		str[bitsNum++] = remainder + '0';
		n = quotient;

		if(quotient == 0)
			break;
	}

	if(1 == signFlag)
		printf("-");
	for(i = bitsNum -1; i >= 0; --i )
		printf("%c",str[i]);
		//putchar(str[i]);
}

//"    "   
void convIntToStr2(int n)
{
	if(n < 0)
	{
		putchar('-');
		n = -n;
	}

	if( n / 10)
		convIntToStr2(n / 10);
	putchar(n % 10 + '0');
}

//       
void reverse(char s[])
{
	int i = 0, j = 0;
	char c = '0';

	for(i = 0, j = strlen(s) - 1; i < j; ++i, --j)
	{
		c = s[i]; s[i] = s[j]; s[j] = c;
	}
}

//  “c        ”     。
void convIntToStr3(int n)
{
	int sign = 0, i = 0;
	char str[10];
	char * p = str;

	if((sign = n) < 0)	
		n = -n;
	

	do{
		str[i++] = n % 10 + '0';		
	}while((n /= 10) > 0);

	if(sign < 0)
		str[i++] = '-';
	str[i] = '\0';

	reverse(str);

	while(*p)
		putchar(*p++);			
}

/**
*     “        ”----            。。。
*/
char * itoa(int value, char * result, int base) 
{
	// check that the base if valid
	if (base < 2 || base > 36) 
	{ 
		*result = '\0';
		return result; 
	}

	char * ptr = result, * ptr1 = result, tmp_char;
	int tmp_value;

	do {
		tmp_value = value;
		value /= base;
		*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
	} while(value);

	// Apply negative sign
	if (tmp_value < 0) 
		*ptr++ = '-';
	
	*ptr-- = '\0';
	
	while(ptr1 < ptr) 
	{
		tmp_char = *ptr;
		*ptr--   = *ptr1;
		*ptr1++  = tmp_char;
	}
	
	return result;
}

테스트 에 틀림 이 없다.

좋은 웹페이지 즐겨찾기