在程式設計中,經常需要將乙個字串中包含的數字轉換成整數進行處理。標準c函式atoi及unicode版本的wtoi都可以用來實現該任務。然而,在很多情況下,我並不喜歡使用這個函式,因為它無法滿足我對轉換結果的要求。
以下,先給出一段對atoi進行測試的**。測試結果使用注釋的形式給出:
[cpp]view plain
copy
//c++ code
#include
#include
#include
int_tmain(
intargc, _tchar* argv)
#pragma region str2inum2w
// 函式功能: 將字串轉換成對應的int型整數(unicode版本)。
// 引數:
// psznum: 源字串。
// pnnum: 轉換後的int型整數的儲存指標。
// bspacelead: 前導空格。
// 返回值: 成功返回true,失敗返回false。
bool
__stdcall str2inumw(
lpcwstr
psznum,
int*pnnum,
bool
bspacelead)
//跳過前導空格。
if(bspacelead == true)
//跳過符號位。
ch = *psznum;
if(ch == _t(
'-'))
else
if(ch == _t(
'+'))
//非數字字元。
if(*psznum < _t(
'0') || *psznum > _t(
'9'))
//第乙個字元是數字字元"0"。
if(*psznum == _t(
'/0'
))
else
} while
(true)
num = num * 10 + (ch - _t('0'
));
continue
; }
//字串終止符。
else
if(ch == _t(
'/0'
))
//溢位。
else
} //非數字字元。
else
} return
bret;
} #pragma endregion
#pragma region str2inuma
// 引數功能:ansi版本的str2inumw。
bool
__stdcall str2inuma(
lpcstr
psznum,
int*pnnum,
bool
bspacelead)
; int
nret = 0;
size_t
cblen = 0;
if(psznum == null || pnnum == null)
//跳過前導空格。
if(bspacelead == true)
cblen = strnlen_s(psznum, 16);
//過濾較長的惡意字串。
if(cblen == 16)
nret = multibytetowidechar(cp_acp, 0, psznum, -1, sznum, 16);
if(nret == 0)
return
str2inumw(sznum, pnnum, bspacelead);
} #pragma endregion
atoi 函式 將字串轉換成int
標頭檔案 include atoi 函式用來將字串轉換成整數 int 其原型為 int atoi const char str 函式說明 atoi 函式會掃瞄引數str字串,跳過前面的空白字元 例如空格,tab縮排等,可以通過isspace 函式來檢測 直到遇上數字或正負符號才開始做轉換,而再遇到非...
字串轉換成整型int
atoi 函式用來將字串轉換成整數 int 其原型為 int atoi const char str 函式說明 atoi 函式會掃瞄引數 str 字串,跳過前面的空白字元 例如空格,tab縮排等,可以通過 isspace 函式來檢測 直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字串結束時 0...
字串轉換成整型數 atoi
題目說明 1 設計函式 int atoi const char nptr 2 功能 把字串轉換成整型數,atoi 會掃瞄引數nptr字串,如果第乙個非空格字元存在,是數字或者正負號則開始做型別轉換,之後檢測到非數字 包括結束符 0 字元時停止轉換,返回整型數。否則,返回零,3 標頭檔案 includ...