题目
输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串”345”,则输出整数345。
分析
这道题尽管不是很难,学过 C/C++语言一般都能实现基本功能,但不同程序员就这道题写出的代码有很大区别,可以说这道题能够很好地反应出程序员的思维和编程习惯,因此已经被包括微软在内的多家公司用作面试题。建议读者在往下看之前自己先编写代码,再比较自己写的代码和下面的参考代码有哪些不同。
我们需要考虑一下几个方面的问题:
(1)正负问题:
由于整数可能不仅仅之含有数字,还有可能以’+’或者’-‘开头,表示整数的正负。因此我们需要把这个字符串的第一个字符做特殊处理。
如果第一个字符是’+’号,则不需要做任何操作;
如果第一个字符是’-‘号,则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。
(2)非法字符问题:
输入的字符串中可能含有不是数字的字符 。每当碰到这些非法的字符 ,我们就没有必要再继续转换 。
(3)溢出问题:
由于输入的数字是以字符串的形式输入,因此有可能输入一个很大的数字转换之后会超过能够表示的最大的整数而溢出。
代码
#include <iostream>
#include <climits>
using namespace std;
class Solution {
public:
bool StrToInt(string str,int& num){
int size = str.size();
if(size <= 0){
return false;
}
int index = 0;
bool positive = true;
if(str[index] == '-'){
positive = false;
++index;
}
else if(str[index] == '+'){
++index;
}
long long result = 0;
for(int i = index;i < size;++i){
if(str[i] < '0' || str[i] > '9'){
cout<<"非法字符"<<endl;
return false;
}
result = result * 10 + str[i] - '0';
if(result > INT_MAX){
cout<<"溢出"<<endl;
return false;
}
}
num = positive == false ? (-1 * result) : result;
return true;
}
};
int main() {
Solution solution;
string str("-122222222222222");
int num = 0;
if(solution.StrToInt(str,num)){
cout<<num<<endl;
}
else{
cout<<"转换有问题"<<endl;
}
}
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
程序员面试题精选100题
程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试题精选100题程序员面试...
程序员面试题精选100题完整版.pdf,这是一份不错的文件
程序员面试题精选程序员面试题精选程序员面试题程序员面试题精选精选
程序员面试题精选100题 本资源是程序员面试题精选100题,涵盖了算法、数据结构、操作系统、计算机网络、数据库等多个领域。今天,我们将深入分析其中的一道题目,即将二元查找树转换成排序的双向链表。 知识点一:...
程序员面试试题.txt程序员面试试题.txt程序员面试试题.txt程序员面试试题.txt
程序员面试题精选100题.rar
程序员面试题精选100题
------------------------------------- java程序员早期面试题汇总 BAT经典面试题汇总.pdf Java常考面试题.pdf java面试题(题库全)....程序员面试题精选100题.pdf ... -------------------------------------
程序员面试题精选100题(2008)程序员面试题精选100题(2008)
程序员面试题精选100例.doc