關於atoi字串轉換成int整數的一些問題

2021-06-05 21:21:08 字數 1920 閱讀 4324

在程式設計中,經常需要將乙個字串中包含的數字轉換成整數進行處理。標準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...