博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题1:把一个字符串转换成数字
阅读量:5258 次
发布时间:2019-06-14

本文共 2303 字,大约阅读时间需要 7 分钟。

1题目分析:

构思过程:

分析方法:写代码前想好测试用例,考虑所有可能的输入,并做相应的处理。这样的程序才有健壮性!

测试用例:char *p[8]={"123","123.45","A123.45","-123.45","+123.45","12A.45","123.A5",NULL};//测试用例

保证所有异常输入是返回0,正常输入时,转换为数字。

基本思路:

1.用Char*实现

空指针判断--变量定义--符号判断--整数部分--是否包含小数部分-小数部分--符号判断--返回值。(注意全程关于异常的判断)

#include "stdafx.h"#include 
#include
using namespace std;//-------------------------------------------------------------------char str_to_numdouble str_to_num(char *p1){ double num1=0,num2=0;//变量定义 char flag='+'; if (p1==NULL)//空指针判断及符号判断 { return 0; } else if (*p1=='-') { flag='-'; ++p1; } else if (*p1=='+') { ++p1; } else if (*p1>'9'||*p1<'0') { return 0; } char *p2=p1+strlen(p1)-1;//尾指针 while(*p1!='.'&&*p1!='\0')//整数部分 { if (*p1>'9'||*p1<'0') { return 0; } num1=num1*10+*(p1++)-'0'; } if (*p1=='\0') { return num1; } while(*p2!='.') //小数部分 { if (*p2>'9'||*p2<'0') { return 0; } num2=num2/10+*(p2--)-'0'; } num2/=10; if (flag=='-') { return -(num1+num2); } else return num1+num2;}int main(){ char *p[8]={"123","123.45","A123.45","-123.45","+123.45","12A.45","123.A5",NULL};//测试用例 double result[8]={0}; double *p1=&result[0]; double *p2=p1,*p3=p1; for (int i=0;i<8;++i) { result[i]=str_to_num(p[i]); if (p[i]==NULL) { cout<
<
2.用string实现

double str_to_num(string str){	double num1=0,num2=0;	char flag='+';	int int_index=0;	if (str.empty())	{		return 0;	}	else if (str[int_index]=='-')	{		flag='-';		int_index++;	}	else if (str[int_index]!='+'&&(str[int_index]>'9'&&str[int_index]<'0'))	{		return 0;	}	else if (str[int_index]=='+')	int_index++;		while(int_index!=str.size()&&str[int_index]!='.' )//容易溢出	{		if (str[int_index]>'9'||str[int_index]<'0')		{			return 0;		}		num1=num1*10+str[int_index++]-'0';	}	if (int_index==str.size())	{		return num1;	}	int j=str.size()-1;	while(str[j]!='.')	{		if (str[j]>'9'||str[j]<'0')		{			return 0;		}		num2=num2/10+str[j--]-'0';	}	num2/=10;	if (flag=='-')	{		return -(num1+num2);	}	else		return num1+num2;}int main(){	string a[7]={"123","123.45","A123.45","-123.45","+123.45","12A.45","123.A5"};//测试用例	double result[7];	for (int i=0;i<7;++i)	{		result[i]=str_to_num(a[i]);		cout<
<<" : "<
<

总结越简单的问题越要考虑全面,保证所有可能的输入,程序都能正常的处理!

转载于:https://www.cnblogs.com/chhuach2005/p/3961698.html

你可能感兴趣的文章
【USACO】 奶牛会展
查看>>
ActiveMQ笔记之点对点队列(Point-to-Point)
查看>>
继承和多态
查看>>
Dijkstra+计算几何 POJ 2502 Subway
查看>>
修复IE不能执行JS的方法
查看>>
程序员究竟该如何提高效率zt
查看>>
希尔排序法(缩小增量法)
查看>>
PHP编程基础学习(一)——数据类型
查看>>
MongoDB-JAVA-Driver 3.2版本常用代码全整理(2) - 查询
查看>>
NPOI处理Word文本中上下角标
查看>>
Android笔记 Handler
查看>>
如何阅读大型前端开源项目的源码(转)
查看>>
java.util.Arrays类详解
查看>>
idea搭建tocmat
查看>>
NYOJ-626-intersection set(二分查找)
查看>>
项目管理之路(1):初步踏入项目管理
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
crypto加密
查看>>
Apache Jackrabbit 2.6.0 发布
查看>>
echarts饼图显示百分比
查看>>