• 不使用c的任何库函数 实现字符串到整数的转换 整数到字符串的转换


    转载请标明出处:http://www.cnblogs.com/NongSi-Net/p/6805844.html

    今天主要总结下:完成编程:

    1、除printf函数之外,不用任何c语言库函数,实现将字符串转化为整数的函数myatoi(可以支持负整数的转化)。

    2、除printf函数之外,不用任何c语言库函数,实现将整数转化为字符串的函数myitoa(可以支持负整数的转化)。

    如果想理解这个问题,必须知道一个知识:

    字符‘0’+一个整数,则得到这个整数的字符型。反之,字符型-字符‘0’则得到整数值。

    如:‘0’+9=‘9’;

          ‘9’-‘0’=9;

    代码如下:

    /*
     ============================================================================
     Name        : mystoi.c
     Author      : 
     Version     :
     Copyright   : Your copyright notice
     Description : Hello World in C, Ansi-style
     ============================================================================
     */
    
    #include <stdio.h>
    
    void mylength(int a,int *lenth)
    {
        int i = 0;
        if(lenth == NULL)
        {
            printf("mylength fun error
    ");
        }
        do
        {
            a = a / 10;
            i++;
        }while(a);
        *lenth = i;
    }
    
    void reserve(int lenth,char buf[])
    {
        int i = 0;
        char temp;
        for(i = 0;i<lenth/2;i++)
        {
            temp = buf[i];
            buf[i] = buf[lenth-i-1];
            buf[lenth-i-1] = temp;
        }
    }
    //1.除printf函数之外,不用任何c语言库函数,实现将整数转化为字符串的函数myitoa(可以支持负整数的转化)。
    void myitoa(int a,char buf[])
    {
        int i = 0;
        int sign;
        int length = 0;
        mylength(a,&length);
        if((sign = a) < 0)
            a = -a;
        for(i = 0;i<length;i++)
        {
            buf[i] = '0' + a % 10;
            a = a / 10;
        }
        if(sign < 0)
        {
           buf[i++] = '-';
           reserve(length+1,buf);
        }else
        {
            reserve(length,buf);
        }
    }
    
    void slength(char buf[],int *length)
    {
        int i = 0;
        while(buf[i])
        {
            i++;
        };
        *length = i;
    }
    //2、除printf函数之外,不用任何c语言库函数,
    //实现将字符串转化为整数的函数myatoi(可以支持负整数的转化)。
    int myatoi(char buf[])
    {
        int sum = 0;
        int i = 0;
        int flag = 1;
        while(buf[i])
        {
            if(buf[i] == ' ')
                i++;
            else if(buf[i] == '+')
            {
                i++;
                flag = 1;
            }
            else if(buf[i] == '-')
            {
                i++;
                flag = -1;
            }
            else if(buf[i]>='0'&&buf[i]<='9')
            {
                sum = sum*10+(buf[i] - '0');
                i++;
            }
            else
                return 0;
        }
        sum = sum * flag;
        return sum;
    }
    
    int main(void) {
        int abc = 123456789;
        char arr[1024] = "--+1836";
        int length = 0;
        char buf[1024] = {0};
        printf("the following thing is myitoa...Int---->string
    
    ");
        myitoa(abc,buf);
        printf("the string is %s.
    
    ",buf);
        printf("the following thing is myatoi...string---->Int
    
    ");
        slength(arr,&length);
        printf("the string's length is %d.
    
    ",length);
        printf("the Intger is %d.
    
    ",myatoi(arr));
        return 0;
    }
  • 相关阅读:
    dotnet程序优化心得(一)
    文章自动排版javascript程序
    GeoTools 2.1.0 released (zz)
    dotnet下时间精度测量
    创建对静态类中一组方法的访问代理
    dotnet程序优化心得(二)
    java web中的Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space
    android开发_SimpleAdapter适配器
    java开发_""和null的区别
    一个小巧的HTML编辑器_CLEditor_源码下载
  • 原文地址:https://www.cnblogs.com/NongSi-Net/p/6805844.html
Copyright © 2020-2023  润新知