本文主要是介绍关于字符串转化为数字的深度优化两种算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近在做项目,在实际操作中发现自己在VC环境下写的字符串转化为整型的函数还是太过理想化了,或者说只能在window平台下软件环境中运行,重新给大家发两种函数方法:
第一个,就是理想化的函数,在VC环境下充分利用指针的优越性,对字符串转化为整型(同时也回答了某位网友的答案吖),实验检验通过:
#include <stdio.h>
#include <string.h>
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 <stdio.h>
#include <string.h>
#include<stdlib.h>
//#include <ctype.h>
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)));
}
这篇关于关于字符串转化为数字的深度优化两种算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!