题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。
         例如输入字符串”-345”,则输出整数-345;

分析:此题看起来,比较简单,每扫描到一个字符,我们把在之前得到的数字乘以10再加上当前字符表示的数字。这个思路用循环不难实现。但是此题很容易出错,有几个地方需要注意一下。

几个需要注意的地方:

1、由于整数可能不仅仅之含有数字,还有可能以'+'或者'-'开头,表示整数的正负。如果第一个字符是'+'号,则不需要做任何操作;如果第一个字符是'-'号,则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。
2、如果使用的是指针的话,在使用指针之前,我们要做的第一件是判断这个指针是不是为空。如果试着去访问空指针,将不可避免地导致程序崩溃。
3、输入的字符串中可能含有不是数字的字符。每当碰到这些非法的字符,我们就没有必要再继续转换。
4、溢出问题。由于输入的数字是以字符串的形式输入,因此有可能输入一个很大的数字转换之后会超过能够表示的最大的整数而溢出。

代码:

 

View Code
 1 #include <iostream.h>
 2 #include <string>
 3 #include <stdlib.h>
 4 using namespace std;
 5 
 6 
 7 int str2Int(string str)
 8 {
 9     if (str.size()==0)
10     {
11         exit(0); //终止程序
12     }
13     int pos=0,num=0;
14     int sign=1;
15     if (str[0]=='-')
16     {
17         pos++;
18         sign=-1;
19     }
20     else if (str[0]=='+')
21     {
22         pos++;
23     }
24     while (pos<str.length())
25     {
26         if (str[pos]<'0' || str[pos]>'9')
27         {
28             exit(0);
29         }
30         num=num*10+(str[pos]-'0');
31         if (num<0)
32         {
33             exit(0);
34         }
35         pos++;
36     }
37 
38     return sign*num;
39 
40 }
41 
42 
43 void main()
44 {
45     string str="23456d";
46     int result=str2Int(str);
47     cout<<result<<endl;
48 }