C/C++分别实现字符串与整数的转换
前提:不使用 itoa 和 atoi。
方法一.C和C++通用的一种转换手段是:
1、整数转化为字符串:采用加‘0’,再逆序的办法,整数加‘0’就会隐性转化成char类型的数字。
2、字符串转化为整数:采用减‘0’的办法,字符串减‘0’就会隐性转化成int类型的数。
代码如下:
/* C实现数字转字符串、字符串转数字 */ #include<stdio.h> char string[7]; /*全局变量,用于存放整数转为char*/ char* itoa_test(int num) { int i = 0, j = 0; char temp[7]; while(num) { temp[i] = num%10 + '0'; /* 整数加0隐性转化为char类型 */ i++; num /= 10; } i--; while(i>=0) /* 将字符串逆序 */ { string[j] = temp[i]; i--; j++; } string[j] = 0; return string; } int atoi_test(char* str) { int i = 0, j = 0, sum = 0; while(*str != 0) { sum = sum*10 + ((*str) - '0'); /* 字符串减0会隐性转化为int类型 */ str++; } return sum; } int main() { char str[] = "1314"; int num = 520; int i = atoi_test(str); char *s = itoa_test(num); printf("atoi: %d ",i); printf("itoa: %s ",s); }测试结果如下图:
方法二.使用C++中的字符串流实现:
stringstream对象的一个常见用法就是,需要在多种数据类型之间实现自动格式化时使用该类型。
代码如下:
#include<iostream> #include<sstream> #include<string> using namespace std; string test_itoa(int num) { ostringstream ostr; ostr << num; return ostr.str(); } int test_atoi(string str) { istringstream istr(str); int num; istr >> num; return num; } int main() { string str = "520"; int num = 1314; int i = test_atoi(str); string s = test_itoa(num); cout<<"atoi: "<<i<<" itoa: "<<s<<endl; }运行结果如下图: