关于字符串转化为数字的深度优化两种算法

最近在做项目,在实际操作中发现自己在VC环境下写的字符串转化为整型的函数还是太过理想化了,或者说只能在window平台下软件环境中运行,重新给大家发两种函数方法:

第一个,就是理想化的函数,在VC环境下充分利用指针的优越性,对字符串转化为整型(同时也回答了某位网友的答案吖),实验检验通过

#include
#include
int rayatoi(char *str)
{
  char *p=str;
  char sign=0;
  int num=0;
  if(*p=='-'){sign=-1;p++;}
  else if(*p=='+') {sign=1;p++;}
//此处程序给你优化下:此时字符串数组无需加'+'号
//  else sign=1;
  while(*p>='0'&&*p<='9')
  {num=num*10+(*p-'0');
   p++;
  }
  return num*sign;
}
void main()
{
char str[10]="+12345678";
printf("转换为整型数字是:%d\r\n",rayatoi(str));

}

第二种方法,是这次博客的精华所在,也是我们在实际项目中面对问题时的解决办法:

项目目的:发一个随机数字字符串命令,函数输出该命令串的整型数字:eg: input~"1001"   output~1001

项目难题:对于一个来上位机的不定长字符串,下位机接收该字符串的长度是不定的,如果只利用str[10]是无法解决的,它会输出这样的结果: 1001(00)

解决办法:先处理空格,后利用atoi函数


#include 
#include 
#include
//#include 
char *trim(char *str)
{
        char *p = str;
        char *p1;
        if(p)
        {
                p1 = p + strlen(str) - 1;
                while(*p && *p==' ') p++;
                while(p1 > p && *p==' ') p1--;
++p1;
    //*p1='/0';
        }
        return p;
}


void main()
{ //unsigned char str[9] = "201250  "; 
   char str[20]="    2012501     ";
 printf("输入字符串是:%s\n",str);
 printf("new:atoi输出整型数字:%d\n",atoi(trim(str)));
 
}

你可能感兴趣的:(数据结构与算法)