【C/C++】字符串转换成整数

来源:互联网 发布:linux 文件名模糊匹配 编辑:程序博客网 时间:2024/06/06 20:03

考虑测试用例:

1、功能测试(输入的字符串表示正数、负数和0)。

2、边界值测试(最大的正整数和最小的负整数)。

3、特殊字符的输入(NULL、字符串中含有非法字符)。

#include<iostream>using namespace std;const int invalid =0;const int valid = 1;int status = valid;int strtoint(const char* string){status = invalid;//用来区分返回num=0时是非法输入还是输入的是'0'.当status为invalid是表示为非法输入,当为valid时是输入的是0.long long num = 0;if(string != NULL && string!='\0'){bool flag = true;if(*string == '+'){string++;}else if(*string == '-'){flag = false;//说明输入是负数string++;}if(*string!='\0') //当仅输入的是‘+’、‘-’号是为非法输入。{int sign = flag ? 1:-1;while(*string!='\0'){if(*string>='0' && *string<='9'){num = num*10+sign*(*string-'0');if((flag && num> 0x7FFFFFFF) || (!flag && num<0x80000000)){//当正数超过0x7FFFFFFF 或者负数小于0x80000000时为非法输入num = 0;break;}string++;}else {num = 0;break;}}//end of whileif(*string =='\0')//用来判断‘1a33’这种情况为非法输入,当遇到字符a时会退出while循环,但是并没有到结束符。{status = valid;return num;}}//end of if(*string!='\0')}return (int)num;}void Test(const char* a,int &b){int result = strtoint(a);if(result ==0 && b == invalid)cout<<"The input is invalid!"<<endl;elsecout<<"The output is:"<<result<<endl;}void main(){char *a = "-";Test(a,status);system("pause");}

0 0
原创粉丝点击