一般将字符串转换为整数有2种方式,一种是用std的库函数,一种就是一步一个脚印来实现了。
1、用库函数实现
<span style="font-family:Comic Sans MS;">#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;
int main(void)
{
char a[]="-100";
char b[]="456";
int c;
c = atoi(a)+atoi(b); //输出356
cout << dec << c << endl;
return 0;
}</span>
注意了,atoi是将字符串转换为整数,也有很多库函数将字符串转换为浮点数,长整形数等,自己可在IDE里调用并查看。同理,整数转化为字符串也有相应的库函数itoa等,原来什么事情都有两面性啊!这里调试程序的时候发现了一个小问题,即warning:no newline at end of file,很多人不去注意这个警告,其实解决这个问题很简单,在程序的末尾再输一下enter就可以了。原因就是编译器的设计,别人是这么设计的,我们就只管遵循即可。
2、不用库函数实现
<span style="font-family:Comic Sans MS;">#include <iostream>
using namespace std;
//不使用库函数将字符串转换为数字
int str2int(const char *str){
int num=0,dig=1;
if (str==NULL)
{
return -1;
}
while (*str==' '){ //滤掉开头的空格
str++;
}
if (*str=='+')
{
str++;
}
if (*str=='-')//如果开头有"-"使dig=-1
{
str++;
dig*=-1;
}
while (*str!='\0')
{
num=num*10+((*str++)- '0');
if (*str<'0'||*str>'9')//如果遇到非数字则跳出循环
{
break;
}
}
num*=dig;
return num;
}
int main(void)
{
int num=0;
char str[10];
cin >> str;
num=str2int(str);
cout<<num<<"\n";
return 0;
}
</span>
其实,以上str++和++str已经没有分别了,因为str的值是一样的就可以了,不在乎表达式的结果。在这里str++的表达式和++str的表达式的结果是不同的,相差1。