字符串转换成整数 (bug版)
来源:互联网 发布:能备案的域名后缀 编辑:程序博客网 时间:2024/06/05 09:40
题目详情(网址http://hero.pongo.cn/home/index)
输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345。
请完成函数StrToInt,实现字符串转换成整数的功能。
友情提醒:
提交代码之前,请复查下你的程序,比如当给的字符串是如左边图片所示的时候,有考虑到么?
当然,它们各自对应的正确输出如右边图片所示(假定你是在32位系统下,编译环境是VS2008以上)
输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345。
请完成函数StrToInt,实现字符串转换成整数的功能。
友情提醒:
提交代码之前,请复查下你的程序,比如当给的字符串是如左边图片所示的时候,有考虑到么?
当然,它们各自对应的正确输出如右边图片所示(假定你是在32位系统下,编译环境是VS2008以上)
input: output:
挑战时间:6/6/2013 9:00-11:00
题目解析:http://blog.csdn.net/v_july_v/article/details/9024123?reload
今天早上花了两个小时的时间实现了字符串转换为整数函数,但是平台上提交未成功,看了july的博客分析http://blog.csdn.net/v_july_v/article/details/9024123?reload,估计问题出在没有考虑数据溢出问题,先贴出基本代码,后面继续进行完善:
测试用例都通过,思路有点不太一样
1.首次遍历字符串中的所有字符,找出转换为整型的有效字符(数字符号等),将负号标志赋值,将可用数字存储在一个数组中(available)
同时记录可用数字的个数(index+1)
2.遍历数组,根据不同数字下标确定数字在整形中的位置,进行运算
3.结合负号标志,确定返回值
int strtoint(const char *str){int length = strlen(str);int positive = -1; //positive or notint negtive = -1;int temp;int index = -1; //index in nunmberint result = 0;char *pstr =(char*)str;int available[20];if(0==length) //nullreturn result;else{if(1==length){if(*str>='0'&&*str<='9'){temp= *str-'0';return temp; }}else{for(int i = 0;i<length;i++){if(' '==*(pstr+i)) //kongge{if((positive==1)||(negtive==1)) //(" + 413"---0)return 0;else if(index!=-1) //("123 456"---123)goto dest;else continue;}else if(0x2b==*(pstr+i)){if(index==-1&&(positive==1)) // (" ++2"---0)return 0;else if(index==-1&&(positive==-1)) //shouge + positive = 1; //positiveelsegoto dest;}else if(0x2d==*(pstr+i)){if(index==-1&&(negtive==1)) //(" --2"=0)return 0;else if(index ==-1&&(negtive==-1))//(shouge -)negtive=1;elsegoto dest; //tiaochu cal}else if(*(pstr+i)<'0'||*(pstr+i)>'9') //meet a go to calgoto dest;else //all number{index++;available[index] = *(pstr+i)-'0'; //begin from 0 index}}}}dest: //calculate final resultif(index==-1) //no number in arrayreturn 0;else{for(int j = 0;j<index+1;j++){int times = index-j;int multi=1;for(int k=0;k<times;k++){multi = multi*10;}result +=available[j]*multi;}}if(negtive==1)return -result;elsereturn result;}
测试代码如下:
int main(){ char str[20]; int result = 0;while(1){ printf("scanf test str:\n"); //scanf_s("%s",&str); gets_s(str); if(strncmp(str,"q",1)==0) break; result = strtoint((const char*)str); printf("result is %d\n",result);}system("pause");return 0;}
目前存在的问题:
1.avail abe数组长度为固定长度
2.没有检查整型溢出,确定整型溢出的判断方法和处理方式
- 字符串转换成整数 (bug版)
- 把字符串转换成整数(字符串)
- 整数转换成字符串
- 整数转换成字符串
- 整数转换成字符串
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 字符串转换成整数
- 计算机图形学概况
- Android LayoutInflater详解
- js-知识1
- 一个前辈写的网络协议学习方法
- Spring的多数据源配置(Spring+iBATIS + Oracle环境下)
- 字符串转换成整数 (bug版)
- 服务器集群架构的设计与选择
- 谷歌2013校园招聘笔试题心得(附答案)
- Linux ixgbe 10G intel 网卡数据包处理流程
- java异常(Exception)
- C#文件流实现文件复制
- Java中static、final用法小结
- asp.net Session丢失问题
- Qt C++ builder模式