字符串转整数函数stoi()实现

xiaoxiao2021-02-28  58

编程题目:

       实现字符串转整数函数,类似标准库函数中的stoi()

       题目考核点是规范的编程习惯。我们得有一种编程信念:编写的函数不仅要实现指定的功能,还得能处理各种异常情况。所以,先罗列出所有的异常可能,对每一种异常找出对策,然后动手写出较周全的程序。

      下面开始解决问题的思维过程:

       既然将字符串转成整数,那么函数的参数就是字符串str,返回值就是int类型。可将函数声明为:

       int StringToInt(const char *str);        确定函数原型后,继续分析可能的异常情况,找出7点:

①str为空指针

②str为空字符串(“”为空字符串)

③str中包含‘+’、‘-’字符

④str只含‘+’、‘-’字符

⑤str包含‘0’~'9'、‘+’、‘-’以外的字符

⑥返回值int类型的值溢出

⑦区别正常返回值与异常返回值

下面贴出博主的C++代码:

#include<iostream> using namespace std; enum status {invalid,valid};//枚举类型 int flag_status=invalid;//全局变量标记异常 int StringToInt(const char *str); long long StringToIntCore(const char *str,bool minus);//字符串转整型核心函数 int StringToInt(const char *str) { flag_status=invalid; int num=0; if(str!=NULL&&str!='\0')//str为空指针或空字符串返回零 { //处理正负号 bool minus=false; if(*str=='+') str++; else if(*str=='-') { str++; minus=true; } if(*str!='\0')//处理输入只有正负号情况 { num=StringToIntCore(str,minus); } } return (int)num; } long long StringToIntCore(const char *str,bool minus) { long long num=0; while (*str!='\0') { if(*str>='0'&&*str<='9')//转换‘0’~'9'之间的字符 { int flag=minus?-1:1;//条件运算符 num=num*10+flag*(*str-'0'); //判断num是否溢出 if((!minus&&num>0x7FFFFFFF)||(minus&&num<(signed int)0x80000000))//(signed int)0x80000000为int 型的最小负数,必须加signed int { num=0; break; } str++;//向后移动一位 } else { num=0; break; } } if(*str=='\0') flag_status=valid; return num; }

转载请注明原文地址: https://www.6miu.com/read-33096.html

最新回复(0)