相关文章推荐
豪爽的帽子  ·  MacBook m1 ...·  1 年前    · 
机灵的小熊猫  ·  MFC 中MessageBox ...·  1 年前    · 
爱听歌的抽屉  ·  Centos7.3 ...·  1 年前    · 
玩篮球的手电筒  ·  你了解VB.NET ...·  1 年前    · 

函数源码:

char * itoa ( int num , char * str , int radix ) char index [ ] = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ " ; //索引表 unsigned unum ; //存放要转换的整数的绝对值,转换的整数可能是负数 int i = 0 , j , k ; //i用来指示设置字符串相应位,转换之后i其实就是字符串的长度;转换后顺序是逆序的,有正负的情况,k用来指示调整顺序的开始位置;j用来指示调整顺序时的交换。 //获取要转换的整数的绝对值 if ( radix == 10 && num < 0 ) //要转换成十进制数并且是负数 unum = ( unsigned ) - num ; //将num的绝对值赋给unum str [ i ++ ] ='-'; //在字符串最前面设置为'-'号,并且索引加1 else unum = ( unsigned ) num ; //若是num为正,直接赋值给unum //转换部分,注意转换后是逆序的 str [ i ++ ] = index [ unum % ( unsigned ) radix ] ; //取unum的最后一位,并设置为str对应位,指示索引加1 unum /= radix ; //unum去掉最后一位 } while ( unum ) ; //直至unum为0退出循环 str [ i ] ='\ 0 '; //在字符串最后添加'\0'字符,c语言字符串以'\0'结束。 //将顺序调整过来 if ( str [ 0 ] =='-' ) k = 1 ; //如果是负数,符号不用调整,从符号后面开始调整 else k = 0 ; //不是负数,全部都要调整 char temp ; //临时变量,交换两个值时用到 for ( j = k ; j <= ( i - 1 ) / 2 ; j ++ ) //头尾一一对称交换,i其实就是字符串的长度,索引最大值比长度少1 temp = str [ j ] ; //头部赋值给临时变量 str [ j ] = str [ i - 1 + k - j ] ; //尾部赋值给头部 str [ i - 1 + k - j ] = temp ; //将临时变量的值(其实就是之前的头部值)赋给尾部 return str ; //返回转换后的字符串

示例程序:

实例

#include < stdlib.h > #include < stdio.h > int main ( ) int number1 = 123456 ; int number2 = - 123456 ; char string [ 16 ] = { 0 } ; itoa ( number1 , string , 10 ) ; printf ( " 数字:%d 转换后的字符串为:%s \ n " , number1 , string ) ; itoa ( number2 , string , 10 ) ; printf ( " 数字:%d 转换后的字符串为:%s \ n " , number2 , string ) ; return 0 ;

效果截图:

2、自己简单实现

实现代码:

实例

#include < stdio.h > char * Int2String ( int num , char * str ) ; //函数声明 int main ( ) int number1 = 123456 ; int number2 = - 123456 ; char string [ 16 ] = { 0 } ; Int2String ( number1 , string ) ; printf ( " 数字:%d 转换后的字符串为:%s \ n " , number1 , string ) ; Int2String ( number2 , string ) ; printf ( " 数字:%d 转换后的字符串为:%s \ n " , number2 , string ) ; return 0 ; char * Int2String ( int num , char * str ) //10进制 int i = 0 ; //指示填充str if ( num < 0 ) //如果num为负数,将num变正 num = - num ; str [ i ++ ] = '-'; str [ i ++ ] = num % 10 + 48 ; //取num最低位 字符0~9的ASCII码是48~57;简单来说数字0+48=48,ASCII码对应字符'0' num /= 10 ; //去掉最低位 } while ( num ) ; //num不为0继续循环 str [ i ] = '\ 0 '; //确定开始调整的位置 int j = 0 ; if ( str [ 0 ] =='-' ) //如果有负号,负号不用调整 j = 1 ; //从第二位开始调整 ++ i ; //由于有负号,所以交换的对称轴也要后移1位 //对称交换 for ( ; j < i / 2 ; j ++ ) //对称交换两端的值 其实就是省下中间变量交换a+b的值:a=a+b;b=a-b;a=a-b; str [ j ] = str [ j ] + str [ i - 1 - j ] ; str [ i - 1 - j ] = str [ j ] - str [ i - 1 - j ] ; str [ j ] = str [ j ] - str [ i - 1 - j ] ; return str ; //返回转换后的值

效果截图:

三、字符串转整数

1、拓展函数

atoi (表示 alphanumeric to integer)是把字符串转换成整型数的一个函数。

windows 环境下,在 <stdlib.h> 头文件中。

int atoi(const char *nptr);//字符串转整数函数,nptr: 要转换的字符串

函数源码

int atoi ( const char * nptr ) return ( int ) atol ( nptr ) ; long atol ( const char * nptr ) int c ; /* 当前要转换的字符(一个一个字符转换成数字) */ long total ; /* 当前转换结果 */ int sign ; /* 标志转换结果是否带负号 */ /* 跳过空格,空格不进行转换 */ while ( isspace ( ( int ) ( unsigned char ) * nptr ) ) ++ nptr ; c = ( int ) ( unsigned char ) * nptr ++; //获取一个字符准备转换 sign = c ; /* 保存符号标示 */ if ( c == '-' || c == '+' ) c = ( int ) ( unsigned char ) * nptr ++; /* 跳过'+'、'-'号,不进行转换 */ total = 0 ; //设置转换结果为0 while ( isdigit ( c ) ) { //如果字符是数字 total = 10 * total + ( c - ' 0 ' ) ; /* 根据ASCII码将字符转换为对应的数字,并且乘10累积到结果 */ c = ( int ) ( unsigned char ) * nptr ++; /* 取下一个字符 */ //根据符号指示返回是否带负号的结果 if ( sign == '-' ) return - total ; return total ;

示例程序:

实例

#include < stdio.h > #include < stdlib.h > int main ( ) printf ( " 字符串 \ " 123456 \ " 转换为数字:%d \ n " , atoi ( " 123456 " ) ) ; printf ( " 字符串 \ " - 123456 \ " 转换为数字:%d \ n " , atoi ( " -123456 " ) ) ; return 0 ;

2、自己简单实现

实现源码:

实例

#include < stdio.h > int String2Int ( char * str ) ; //函数声明 int main ( ) printf ( " 字符串 \ " 123456 \ " 转换为数字:%d \ n " , String2Int ( " 123456 " ) ) ; printf ( " 字符串 \ " - 123456 \ " 转换为数字:%d \ n " , String2Int ( " -123456 " ) ) ; return 0 ; int String2Int ( char * str ) //字符串转数字 char flag = '+'; //指示结果是否带符号 long res = 0 ; if ( * str =='-' ) //字符串带负号 ++ str ; //指向下一个字符 flag = '-'; //将标志设为负号 //逐个字符转换,并累加到结果res while ( * str >= 48 && * str <= 57 ) //如果是数字才进行转换,数字0~9的ASCII码:48~57 res = 10 * res + * str ++- 48 ; //字符'0'的ASCII码为48,48-48=0刚好转化为数字0 if ( flag == '-' ) //处理是负数的情况 res = - res ; return ( int ) res ;

四、利用 sprintf() 函数和 sscanf() 函数

整数转字符串

测试代码:

实例

#include < stdio.h > char * Int2String ( int num , char * str ) ; //函数声明 int main ( ) int number1 = 123456 ; int number2 = - 123456 ; char string [ 16 ] = { 0 } ; Int2String ( number1 , string ) ; printf ( " 数字:%d 转换后的字符串为:%s \ n " , number1 , string ) ; Int2String ( number2 , string ) ; printf ( " 数字:%d 转换后的字符串为:%s \ n " , number2 , string ) ; return 0 ; char * Int2String ( int num , char * str ) sprintf ( str , " %d " , num ) ; return str ;

运行结果:

int main ( ) printf ( " 字符串 \ " 123456 \ " 转换为数字:%d \ n " , String2Int ( " 123456 " ) ) ; printf ( " 字符串 \ " - 123456 \ " 转换为数字:%d \ n " , String2Int ( " -123456 " ) ) ; return 0 ; int String2Int ( char * str ) //字符串转数字 char flag = '+'; //指示结果是否带符号 long res = 0 ; if ( * str =='-' ) //字符串带负号 ++ str ; //指向下一个字符 flag = '-'; //将标志设为负号 sscanf ( str , " %ld " , & res ) ; if ( flag == '-' ) res = - res ; return ( int ) res ;

运行结果: