要善用百度。。。百度百科就有atoi這個詞條,里面有c語言實現(xiàn)的源代碼(其實是c++,不過唯一的不同只是它的字符串定義為了const,即常量,表示在函數(shù)里不允許改變此字符串內(nèi)容)
創(chuàng)新互聯(lián)提供高防服務(wù)器租用、云服務(wù)器、香港服務(wù)器、川西大數(shù)據(jù)中心等
我在這里加上注釋簡單說明一下該源碼
int
my_atoi(const
char
*str){
int
result;
//保存返回結(jié)果的
int
signal
=
1;
//保存符號的,默認(rèn)正數(shù)
//判斷第一個數(shù)字是否合法
if((*str='0'*str='9')||*str=='-'||*str=='+'){
//如果是-,符號變?yōu)?1,指針右移
//如果是+,指針右移(總之指向了第一個數(shù)字)
if(*str=='-'||*str=='+'){
if(*str=='-')
signal
=
-1;
str++;
}
}
else
return
0;//第一個不是+,-或數(shù)字,非法返回0
//這里就是轉(zhuǎn)換,是數(shù)學(xué)的問題就不解釋了
while(*str='0'*str='9')
result
=
result*10+(*str++
-'0');
return
signal*result;
}
不過這個程序,如果字符串是非法的話,他也會返回直到非法字符之前的數(shù)值
比如123abc
返回值就是123
abcd轉(zhuǎn)換數(shù)值??你是要做16進(jìn)制的嗎?
一般atoi只是轉(zhuǎn)換10進(jìn)制的?不包括16進(jìn)制
如果你要支持16進(jìn)制?可以自行增加一個前導(dǎo)符?比較常用的是x
即如果字符串第一個字符為x?則表示改字符串為16進(jìn)制形式
判斷和你現(xiàn)有的符號判斷類似,處理數(shù)據(jù)的時候不能用isdigit判斷?而是要加入a-f的判斷
計算的時候?10*n改成16*n
簡單的例子
int?atoi(char?s[])
{
int?i,?n,?sign;
for?(i?=?0;?isspace(s[i]);?i++)??/*?skip?white?space?*/
;
if(s[i]?==?'x')/*hex*/
{
i?++;
for?(n?=?0;?isdigit(s[i])?||?(s[i]='a'??s[i]?=?'f');?i++)
{
if(isdigit(s[i]))
n?=?16?*?n?+?(s[i]?-?'0');
else
n?=?16?*?n?+?(s[i]?-?'a')+10;?
}
return?n;
}
sign?=?(s[i]?==?'-')???-1?:?1;
if?(s[i]?==?'+'?||?s[i]?==?'-')??/*?skip?sign?*/
i++;
for?(n?=?0;?isdigit(s[i]);?i++)
n?=?10?*?n?+?(s[i]?-?'0');
return?sign?*?n;
}
字符串轉(zhuǎn)整型。
ASCII to integer
Convert strings to integer
如果可以的話也能將字符串轉(zhuǎn)換成整形數(shù)值,
如:
char *buf= "1234 ";
int i=atoi(buf);
//則i = 1234;