小程序字符串轉(zhuǎn)換為數(shù)字如何實(shí)現(xiàn)
1、字符串轉(zhuǎn)換成數(shù)字:
C語言庫函數(shù):atoi 實(shí)現(xiàn)了此功能。
int atoi(const char *nptr);
函數(shù)說明: 參數(shù)nptr字符串,如果第一個非空格字符存在或者不是數(shù)字也不是正負(fù)號則返回零,否則開始做類型轉(zhuǎn)換,之后檢測到非數(shù)字(包括結(jié)束符 \0) 字符時停止轉(zhuǎn)換,返回整型數(shù)。
代碼如下:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
/**
* 功能:string轉(zhuǎn)int
* 注意:
* 1、字符串是否為空;
* 2、忽略\t 或空格;
* 3、溢出判斷;
* 4、輸入字符串只有“+”或“-”號時;
* 5、掃描參數(shù)src字符串,跳過前面的空格字符,直到遇上數(shù)
字或正負(fù)符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時
('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。
*/
int convertionStringToInt(char *src)
{
bool flag=false;
long num=0; /*使用long類型,數(shù)據(jù)溢出情形*/
int minus=0;
if((NULL == src)||('\0'== *src)) //判斷如慘字符串指針是否為空
{
return 0;
}
if(('\t' == *src)||(' ' == *src)) //忽略tab字符和空格字符
{
src ++;
}
if('-' == *src) //判斷是否是‘+’ 或 ‘-’符號
{
flag=true;
src++;
}
else if('+' == *src)
{
src++;
}
minus=flag?-1:1;
while('\0' != *src)
{
if(('0' <= *src)&&('9' >= *src))
{
num= num*10+minus*((*src)-'0');
if((!flag && num > 0x7FFFFFFF)
|| (flag && num < (signed int)0x80000000)) //判斷轉(zhuǎn)換后的整型數(shù)是否溢出,注意正負(fù)數(shù)均要判斷
{
num = 0;
break;
}
src++;
}
else
{
break; //遇到非數(shù)字字符時結(jié)束轉(zhuǎn)換
}
}
return num;
}
int main()
{
char data[8][15]={"4673","15234234234","-3489","+9776","ab67","123bd","+","-"};
int i=0;
int val=0;
for(i=0;i<8;i++)
{
printf("Before data[%ld]=%s ",i,data[i]);
val=convertionStringToInt(data[i]);
printf("After Convert=%d\n",val);
}
return 0;
}