微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机常考笔试题(字符串与整数的转换问题),这个怎能不会?

单片机常考笔试题(字符串与整数的转换问题),这个怎能不会?

时间:10-02 整理:3721RD 点击:
记得曾经参加过TCL的面试,记得有一道题目就是:把整数转换为字符串的问题。题目的要求是:要把详细的解题思路写清楚,当然是越详细越好。不过试卷没有要求代码要写得完美无缺,毕竟笔试不同于机试,能在电脑上面敲出来的不一定就能够手写出来。所以可以看出写代码的思路是有多重要,也就是指我们经常所说的程序流程图。
好了,看看今天的干货吧,要参加面试的快来看看。如果觉得不错的话,回帖鼓励一下。
一、整数转换为字符型函数
/**
  * 函数功能:把一个任意的整数转换为字符串格式
  * 函数参数:value: 要转换的整数      string:指向转换为字符串后的指针
  * 返回值:字符长度
  */
int Inter_To_Str(int value,char *string)
{
        int i=0,len=0,j=0;  
        int absolute=value>0?value:-value;        //这个用于取绝对值
        char str[20]="";                                      //定义一个数组保存转换的字符
       
        if (string==(void*)0)                               //string如果指向一个空指针的话,直接返回
        {  
                 return -1;  
        }  
        while (absolute) {  
                str[i++]=absolute%10+'0';             //把每一位分离出来,并保存到刚定义的数组
                                                                    //分离的每一位只要加上字符'0',进行类型的强制转换就可以。
                absolute/=10;   
        }  
        len=i;  
        if (value<0)                                        //如果是负数就加一个“-”号
        {  
                len+=1;  
                for (j=i-1;j>=0;j--)  
                        string[len-1-j]=str[j];  
                string[0]='-';  
        }  
        else{                                                 //如果是整数的话,直接拷贝
                for (j=i-1;j>=0;j--)  
                        string[len-j-1]=str[j];  
        }  
        string[len]='\0';                               //别忘了末尾加个字符'\0',字符串结束符
       
        return len;                                     //返回字符串长度
}

二、字符串转换为整数型函数
/**
  * 函数功能:把一个字符串转换为整数格式
  * 函数参数:str:指向要转换的字符串的指针
  * 返回值:转换后的整数值
  */
int Str_To_Int(const char *str)
{  
        int num=0,dig=1;  
        if (str==(void*)0)                    //指针为空,则直接返回
        {  
                return -1;  
        }  
        while (*str=='  '){                   //若有空格,直接过滤掉
                str++;  
        }  
        if (*str=='+')  
        {  
                str++;  
        }  
        if (*str=='-')                           //有'-'字符,则表示为负数
        {  
                str++;  
                dig*=-1;  
        }  
        while (*str!='\0')  
        {  
                num=num*10+(*str++-'0');  
                if (*str<'0'||*str>'9')          //遇到不需要的字符,则跳出循环。有效字符在'0'--'9'之间。
                {  
                        break;  
                }  
        }  
        num*=dig;  
        return num;  
}


写的真好,有个良好的编程风格是个很大的优势啊 ~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top