剑指Offer系列---(1)将字符串转换成整数
来源:互联网 发布:淘宝css装修代码大全 编辑:程序博客网 时间:2024/06/09 20:15
1.题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
2.考虑情况:
1)考虑各种特殊输入;
2)考虑到输入的字符串中有非数字字符和正负号;
3)要考虑最大的正整数和最小的负整数以及溢出;
4)考虑到当输入的字符串不能转换成整数时,应该如何做错误处理。
3.源代码
// Copyright (c) 2015年 skewrain. All rights reserved.#include <stdio.h>#include <stdbool.h>bool isValid;long strToInt(const char *str){ //非法输入 if (str == NULL) { isValid = false; return 0; } //是否为负数 bool isMinus = false; //跳过前面的空白字符 while (*str ==' ') { str++; } //第一个非空白字符为+号 if (*str == '+') str ++; //第一个非空白字符为-号 else if (*str == '-') { str++; isMinus = true; } //如果只输入了空白字符、符号位、或者什么都没输入,也为非法输入 if (*str =='\0') { isValid = false; return 0; } //后面的输入如果合法,则转化为整数 long num = 0; //这样可以判定类似234asd的输入 while (*str!='\0') { //输入不在0-9之间,属于非法输入 if (*str<'0'||*str>'9') { isValid = false; return 0; } //对不包含符号位的合法输入进行转换 num = 10*num + (*str-'0'); str++; } //根据符号位转换正负 num = isMinus?(-1*num):num; //判断是否溢出了int的范围 if (num>0X7FFFFFFF || num<(signed int)0X80000000) { isValid = false; return 0; } //上面没有返回,则说明合法并没有发生溢出 return num; }int main(int argc, const char * argv[]) { static char str[100000000]; while (gets(str)!= NULL) { isValid = true; long result = strToInt(str); if(isValid) printf("%ld\n",result); else printf("Ohh,Error!\n"); } return 0;}
0 0
- 剑指Offer系列---(1)将字符串转换成整数
- 剑指offer系列源码-把字符串转换成整数
- 剑指offer系列之48:把字符串转换成整数
- 剑指offer----将字符串转化成整数
- 《剑指Offer》面试题:将字符串转换为整数
- 剑指offer--把字符串转换成整数
- 《剑指offer》把字符串转换成整数
- 《剑指offer》把字符串转换成整数
- [剑指offer]把字符串转换成整数
- 剑指offer|把字符串转换成整数
- 《剑指offer》-把字符串转换成整数
- 剑指offer 把字符串转换成整数
- 剑指offer: 把字符串转换成整数
- 【剑指offer】把字符串转换成整数
- 剑指offer--把字符串转换成整数
- 把字符串转换成整数 剑指offer
- 剑指offer:把字符串转换成整数
- 【剑指offer-解题系列(50)】把字符串转换成整数
- 2.1.4 Shading in World Space (about uniforms) 在世界坐标系里着色(关于uniforms参数)
- 在c#中使用sqlite的两个注意点
- [BZOJ1878][SDOI2009]HH的项链
- Lambda 表达式
- 形式语言分类
- 剑指Offer系列---(1)将字符串转换成整数
- 端口复用
- git原理摘要
- 压缩感知Compressive sensing(一)
- UC/OS II 系统时钟
- win8.1输入法快捷键
- springMVC系统配置的 其他配置文件支持
- 数据结构 - 结构
- android中.9.png图片