题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。
题目比较简单,但是涉及到许多问题,例如非法输入,有正负号,是否为空字符串,且不是输入大数类型,可以用long long,8字节整型等等。主要:int a=a*10+(str[i]-'0')
也可以直接使用c的库函数,atoi函数,如果不能转换则返回0.使用例子如下
string a="-1232 pighehe";
int num=atoi(a);
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 enum flag{ 5 valid=0, 6 invalid=1 7 }; 8 int judge=valid; 9 10 11 long long paraInt(string str) 12 { 13 judge=valid; 14 bool Fuflag=false; 15 long long num=0; 16 int i=0; 17 if(str.size()==0) 18 { 19 judge=invalid; 20 return invalid; 21 } 22 if (str[0]=='-') 23 { 24 i=1; 25 Fuflag=true; 26 if(str.size()==1) 27 { 28 judge=invalid; 29 return invalid; 30 } 31 } 32 33 for (i;i<str.size();++i) 34 { 35 int temp=str[i]-'0'; 36 if(temp>=0&&temp<=9) 37 num=num*10+temp; 38 else{ 39 judge=invalid; 40 return invalid; 41 } 42 } 43 if(Fuflag) 44 a=-a; 45 return num; 46 } 47 int main() 48 { 49 string str; 50 while(cin>>str) 51 { 52 long long num=paraInt(str); 53 if(!judge) 54 cout<<num<<endl; 55 else 56 { 57 cout<<"invalid input"<<endl; 58 } 59 str.clear(); 60 } 61 return 0; 62 }
题目:输入一个整数,把该整数转换成字符串并输出。例如输入整数345,则输出整数"345"。
类似的也有函数itoa,使用例子如下:
int num=12345;
char str[10];
itoa(num,str,10); //将num转换为字符串保存到str中
不使用itoa函数:将整数的每位转换为字符,然后再逆序保存。例如:
//整形转成字符串函数实现 //题目不难,重点考察面试者对问题考虑的全面程度 #include <iostream> using namespace std; void itoa_mf(int num,char str[]) { int sign = num; int i = 0; int j = 0; char temp[100]; //如果是负数就去掉符号,将-1234转成1234 if(sign < 0) { num = -num; } //转成字符串,1234转成"4321" do { temp[i] = num % 10 + '0'; num /= 10; i++; }while(num > 0); //如果是负数的话,加个符号在末尾,如:"4321-" if(sign < 0) { temp[i++] = '-'; } temp[i] = '\0'; i--; //将temp数组中逆序输入到str数组中 //将"4321-" ====> "-1234" while(i >= 0) { str[j] = temp[i]; j++; i--; } //字符串结束标识 str[j] = '\0'; } //测试用例 void main() { int a = 0; char s[100]; itoa_mf(a,s); cout << s << endl; }