博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
输入一个表示整数的字符串,把该字符串转换成整数并输出(实现atoi函数功能)...
阅读量:4957 次
发布时间:2019-06-12

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

题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。

例如输入字符串"345",则输出整数345。
-----------------------------
此题一点也不简单。不信,你就先不看一下的代码,你自己先写一份,然后再对比一下,便知道了。

1.转换的思路:每扫描到一个字符,我们把在之前得到的数字乘以10再加上当前字符表示的数字。

这个思路用循环不难实现。
2.由于整数可能不仅仅之含有数字,还有可能以'+'或者'-'开头,表示整数的正负。
如果第一个字符是'+'号,则不需要做任何操作;如果第一个字符是'-'号,
则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。
3.接着我们试着处理非法输入。由于输入的是指针,在使用指针之前,
我们要做的第一件是判断这个指针是不是为空。
如果试着去访问空指针,将不可避免地导致程序崩溃。
4.输入的字符串中可能含有不是数字的字符。
每当碰到这些非法的字符,我们就没有必要再继续转换。

最后一个需要考虑的问题是溢出问题。由于输入的数字是以字符串的形式输入,

因此有可能输入一个很大的数字转换之后会超过能够表示的最大的整数而溢出。

enum Status {kValid = 0, kInvalid}; int g_nStatus = kValid; int StrToInt(const char* str) {
g_nStatus = kInvalid; long long num = 0; if(str != NULL) {
const char* digit = str; // the first char in the string maybe '+' or '-' bool minus = false; if(*digit == '+') digit ++; else if(*digit == '-') {
digit ++; minus = true; } // the remaining chars in the string while(*digit != '/0') {
if(*digit >= '0' && *digit <= '9') {
num = num * 10 + (*digit - '0'); // overflow if(num > std::numeric_limits
::max()) {
num = 0; break; } digit ++; } // if the char is not a digit, invalid input else {
num = 0; break; } } if(*digit == '/0') {
g_nStatus = kValid; if(minus) num = 0 - num; } } return static_cast
(num); }

 

转载自:  

转载于:https://www.cnblogs.com/dartagnan/archive/2011/09/15/2177691.html

你可能感兴趣的文章
bzoj 1208: [HNOI2004]宠物收养所 set
查看>>
WCF学习目录
查看>>
Redis:一、简介
查看>>
好玩的注释
查看>>
验证模式和辨识模式
查看>>
rand()函数
查看>>
[NOI2015]品酒大会
查看>>
基于XMPP协议的手机多方多端即时通讯方案
查看>>
adb command 20150427
查看>>
FastStone Capture 注册码 序列号
查看>>
程序员常见问题
查看>>
C# 3DES 加密算法
查看>>
总结集合
查看>>
本地安装git
查看>>
[牛客数据库SQL实战] 21~30题及个人解答
查看>>
poj2485
查看>>
Python之路----------time模块
查看>>
select列表使用正则的小技巧(HIVE)
查看>>
UIViewAnimation动画
查看>>
nginx location详解
查看>>