天天看点

字符串与数字相互转换  1.数字转换为字符串2.字符串转换为数字

  1.数字转换为字符串

           C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,有如下几种函数对应不同的需求。

              ● itoa():将整型值转换为字符串。

              ● ltoa():将长整型值转换为字符串。

              ● ultoa():将无符号长整型值转换为字符串。

              ● gcvt():将浮点型数转换为字符串,取四舍五入。

              ● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。

              ● fcvt():指定位数为转换精度,其余同ecvt()。

            当要求不使用库函数来进行转换。我们可以探讨一下思路。

            数字是int等类型,而字符串变量需要字符数组来存放。由此可知需要将数字求出各个位然后存放到数组中。需要特别注意的就是当数字是负数时需要在数组的第0位存放正负符号。

            具体实现如下:

void int2str(int n,char*str)
{
    int temp;
    temp=n>0?n:-n; //保证temp为正

    char buff[10]="";
    int i=0;
    int len=0;
    if(str==NULL)
        return;
    while(temp)
    {
        buff[i++]=temp%10+'0';
        temp=temp/10;
    }
    len=n<0?++i:i;  //在字符数组中为正负号留下位置

    str[i]=0;
    while(1)
    {
        i--;
        if(buff[len-i-1]==0)
            break;
        str[i]=buff[len-i-1];

    }
    if(i==0)
    {
        str[i]='-';
    }
}
           

    注意事项:

    1.while函数中buff倒序复制到str,这时是为了给正负号留下位置。当然也可以先判断正负号,对i进行++操作,然后再正序复制。

2.字符串转换为数字

        与1类似,C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。以下列举了各函数的方法及其说明。

           ● atof():将字符串转换为双精度浮点型值。

          ● atoi():将字符串转换为整型值。

          ● atol():将字符串转换为长整型值。

          ● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。

          ● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。

          ● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。

            当要求不使用库函数来进行转换。我们探讨一下思路。

            字符串变量存储在字符数组之中,即可以按照下标访问到每个字符。根据ASCII码的规则每个字符可以找到对应的数字,即‘4’-‘0'数值等于4。按照此特性即可进行转换。

            特别要注意的是正负号的处理,我的方法是用一个常数来记录正负。

int str2int(char *str)
{
    int temp=0;
    int c=1; //正负系数
    if(*str=='-')
    {
        c=-1;
        str++;
    }
    if(*str=='+')
    {
        str++;
    }
    while (*str!=0)
    {
        if((*str<'0')||(*str>'9'))
        {
            break;
        }
        temp=temp*10+(*str-'0');
        str++;
    }
    temp=c*temp;

    return temp;
}
           

参考网址:C语言字符串与数字相互转换

本人不才,有错希望大家指出。

继续阅读