将字符串转化为数字的函数怎么写?

一、测试篇

首先说要有哪些功能测试?(据说先写测试用例后写代码,比较高级)

1、带符号的数字且长度较短的字符串  +12,-13等
2、不带符号的数字且长度较短的字符串 2334等
3、字母和数字组合:a23 ,34fg56等
4、其他非数字非字符字符和数字或者字母的组合:==2、++1、&…(23、342——等
其他的测试用例,还未想到
 
暂不考虑的问题:
转化得到的整型数,超过整型数表示范围
 
二、函数说明
输入:+和-、数字型字符(正数、0、负数)、其他
输出:对应字符串的整数
 
三、鲁棒性考虑(鲁棒性是啥?——我的理解是能适应各种变态场景,程序做到处“惊”不“崩”)
1)输入为空指针  (空指针不指向内存任何单元。如果输入空指针时,如何防范程序崩溃)
 
 
程序:

int StrToInt(char * string){
int number=0;
char temp;
if(*string==NULL)
cout<<"空指针,不能转化"<<endl;

if(*string=='+'||*string=='-'){//首字符为+-或者数字,才允许转化
temp=*string;
string++;
while(isdigit(*string)&&*string!='\0'){//未结束,且为数字
number=number*10+*string-'0';
++string;
}
if(!isdigit(*string)&&*string!='\0'){ //非正常结束,且不是文件结尾
printf("不能转化,返回值:");
return 0;
}
if(temp=='-')
number=number*(-1);
return number;
}
else if((!isdigit(*string))&&(*string!='+')&&(*string!='-')){//当前字符不是+、-、和数字的其他字符
printf("不能转化,返回值:");
return 0;
}
else{
do{
number=number*10+*string-'0';
++string;
}while(*string!='\0'&&isdigit(*string));
if(!isdigit(*string)&&*string!='\0'){ //未到串尾,且不是数字
printf("不能转化,返回值:");
return 0;
}
else
return number;
}
}

测试主程序:

#include <iostream>
#include <cstring>
#include<cctype>
using namespace std;

int main(){
char s[10];
int a;
gets(s);
a=StrToInt(s);
printf("%d",a);

system("pause");
return 0;
}

 

题目来源:剑指offer P12

程序暂时完成初步功能,通过所列出的测试用例。欢迎拍砖,共同完善。

posted @ 2014-06-13 20:24  snail's dream  阅读(1600)  评论(0编辑  收藏  举报