int 型数据的范围:-2^31~2^31-1(-2147483648~2147483647)
unsigned int: 0~2^32
1.自己写的函数,注意特殊情况的考虑
#include <iostream>
using namespace std;
#include <climits> //包含整型数的范围限制
int StrToInt(char *s)
{
unsigned long int number=0;
bool ifneg=false;
if(s==nullptr) //需要对空字符串进行处理
{
cout<<"字符串为空";
return 0;
}
else
{
while(*s==‘ ‘||*s==‘\n‘||*s==‘\r‘||*s==‘\t‘||*s==‘f‘||*s==‘\b‘) //扫描前面的空格,跳过空格
{++s;}
if(*s==45)
{ifneg=true;
++s;} //首字母为负号
else if(*s==43)
{++s;}
while(*s!=0) //c风格字符串以空字符(\0)结尾,空字符的ASCII码为0。cout打印时看到空字符才结束
{
if(*s<‘0‘||*s>‘0‘+9)
{
cout<<"存在非数字字符"; //需要考虑存在非数字字符的情况
return 0;
}
number=number*10+*s-‘0‘;
++s;
if(ifneg==false&&number>INT_MAX) //对溢出进行处理
{
cout<<"数字溢出,结果为:"<<INT_MAX;
return INT_MAX;
}
else if(ifneg==true&&number-1>INT_MAX)
{
cout<<"数字溢出,结果为:"<<INT_MIN;
return INT_MIN;
}
}
if(ifneg==true)
{cout<<(int)-number;
return (int)-number;}
else
{cout<<(int)number;
return (int)number;}
}
}
void main()
{
char s[100];
cin>>s;
StrToInt(s);
}
2.c语言中的sscanf
#include<iostream> using namespace std; #include<stdio.h> void main() { char s[100]; cin>>s; int i; float f; sscanf(s,"%d",&i); //溢出的时候会用负值来表示 sscanf(s,"%f",&f); cout<<"i:"<<i<<endl; cout<<"f:"<<f; }
3.c标准库中的atoi
#include<iostream> using namespace std; #include<stdio.h> void main() { char s[100]; cin>>s; int i; float f; i=atoi(s); //存在非数字的字符时也会输出0,溢出时会得到INT_MAX f=atof(s); //科学计数法来表示结果 cout<<"i:"<<i<<endl; cout<<"f:"<<f; }
#include<iostream> using namespace std; #include<string> void main() { string s; cin>>s; int i; float f; i=atoi(s.c_str()); //存在非数字的字符时也会输出0,溢出时会得到INT_MAX f=atof(s.c_str()); //科学计数法来表示结果 cout<<"i:"<<i<<endl; cout<<"f:"<<f; }
原文:http://www.cnblogs.com/wy1290939507/p/4476932.html