itoa 及其实现与sprintf

来源:互联网 发布:c语言for循环执行顺序 编辑:程序博客网 时间:2024/06/13 23:49
/***************************************************************************************itoa与sprintf函数 linux c 字符串处理函数itoa函数及atoi函数,c语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。以下是用itoa()函数将整数转 换为字符串的一个例子:*****************************************************************************************/#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>void test1(void){    int num = 100;    char str[25];    itoa(num, str, 10);    printf("The number 'num' is %d and the string 'str' is %s. /n" ,num, str);}/***************************************************************************************itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数。在上例中,转换基数为10。10:十进制;2:二进制...itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似:char str[255];sprintf(str, "%x", 100); //将100转为16进制表示的字符串。下列函数可以将整数转换为字符串:----------------------------------------------------------函数名 作 用----------------------------------------------------------itoa() 将整型值转换为字符串ltoa() 将长整型值转换为字符串ultoa() 将无符号长整型值转换为字符串一 atoi 把字符串转换成整型数例程序:*****************************************************************************************/int atoi (char s[]);void test2(void ){    char s[100];    gets(s);    printf("integer=%d/n",atoi(s));}int atoi (char s[]){    int i,n,sign;    for(i=0;isspace(s[i]);i++)    {    }//跳过空白符;    sign=(s[i]=='-')?-1:1;    if(s[i]=='+'||s[i]==' -')//跳过符号        i++;    for(n=0;isdigit(s[i]);i++)        n=10*n+(s[i]-'0');//将数字字符转换成整形数字    return sign *n;}/***************************************************************************************二   itoa  把一整数转换为字符串例程序:*****************************************************************************************/void  itoa (int n,char s[]);//atoi 函数:将s转换为整形数void test3(void ){    int n;    char s[100];    printf("Input n:/n");    scanf("%d",&n);    printf("the string : /n");    itoa(n,s);}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]);}/***********************************************************************char *itoa(int value, char *string, int radix);int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等头文件: <stdlib.h>itoa操作使用 程序例:#include <stdlib.h>#include <stdio.h>int main(){    int number = 123456;    char string[25];    itoa(number, string, 10);    printf("integer = %d string = %s\n", number, string);    return 0;}*************************************************************************//* 实现itoa函数的源代码 */char *myitoa(int num,char *str,int radix){    /* 索引表 */    char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";    unsigned unum; /* 中间变量 */    bool minus=0;    int i=0,j,k;    /* 确定unum的值 */    if(radix==10&&num<0) /* 十进制负数 */    {        unum=(unsigned)-num;        minus=1;    }    else unum=(unsigned)num; /* 其他情况 */    /* 逆序 */    do    {        str[i++]=index[unum%(unsigned)radix];        unum/=radix;    }while(unum);    if(minus==1)        str[i++]='-';    str[i]='\0';    /* 翻转 */    strrev(str);    return str;}void test4(){    int number = 17;    char string[25];    myitoa(number, string, 2); //按十进制转换    printf("integer = %d string = %s\n", number, string);    myitoa(number, string, 16); //按16进制转换    printf("integer = %d string = %s\n", number, string);}int main(){    test4();    //test1();    //test2();    //test3();}

原创粉丝点击