1. 将一个字符串转化为一个int型的数
bool str2Int(const char* str, int& num)
{
num = 0;
if(str == NULL) {
return false;
}
//判断最高位是否为+或者-
bool isMinus = false;
const char* pDigit = str;
if(*pDigit == '+')
pDigit++;
else if (*pDigit == '-') {
pDigit++;
isMinus = true;
}
//循环判断是否到最末尾
while(*pDigit != '\0') {
if(*pDigit >= '0' && *pDigit <= '9') {
num = num*10 + *pDigit - '0';
if( num > std::numeric_limits<int>::max() ){
num = 0;
cout << "overflow"<<endl;
return false;
}
pDigit++;
}
else {
num = 0;
return false;
}
}
if(*pDigit == '\0'){
if(isMinus)
num = -num;
return true;
}
}
2. 将一个字符串转化为一个float型的数
bool str2Float(const char* str, float& num)
{
num = 0;
if(NULL == str){
return false;
}
//判断正负号
bool isMinus = false;
const char* pDigit = str;
if(*pDigit == '+'){
pDigit++;
}
else if(*pDigit == '-'){
pDigit++;
isMinus = true;
}
bool onRight = false;
int countNum = 0;
while(*pDigit != '\0')
{
if(onRight == false)//left
{
if(*pDigit >= '0' && *pDigit <= '9'){
num = num*10 + *pDigit - '0';
if(num >= std::numeric_limits<float>::max())
{
num = 0;
cout<<"overflow"<<endl;
return false;
}
countNum++;
pDigit++;
}
else if(*pDigit == '.'){
countNum = 1;
onRight = true;
pDigit++;
}
else{
cout<<"invalid char"<<endl;
num = 0;
return false;
}
}
else {//right
if(*pDigit >= '0' && *pDigit <= '9'){
num = num + (*pDigit-'0') / pow(10.0f,countNum);
if(num >= std::numeric_limits<float>::max() )
{
num = 0;
cout<<"overflow"<<endl;
return false;
}
countNum++;
pDigit++;
}
else{
cout<<"invalid char"<<endl;
num = 0;
return false;
}
}
}
if(pDigit == '\0'){
if(isMinus)
{
num = -num;
}
return true;
}
}