整理 C C 中字串與整數之間的相互轉換

2021-07-09 10:54:35 字數 2539 閱讀 2869

最近刷題過程中總是碰到這個知識點,因此做個總結記錄一下。

一、用c標準io庫中的sprintf()和sscanf()轉換

sprintf()函式原型:

#include int sprintf(char *str,const char *format);
函式的功能是:將變數列印到字串中。(與printf的用法一致,區別僅在於sprintf()列印到字串,而printf()列印到標準輸出)

因此可利用sprintf()將數字轉換為字串。

sscanf()函式原型:

#include int sprintf(char *str, const char *format, ...);
函式的功能是:將引數str的字串轉換成format對應的型別並將轉換後的結果存於對應的變數內。(與scanf用法一致,區別在於scanf()從標準輸入到引數,而sscanf從字串輸入到變數)

因此可利用sscanf()將字串轉換為數字。

示例**:

#include #include int main(void)

; int a;

//string --> int

sscanf(str1,"%d",&a);

printf("%d\n",a);

//int -->string

a = 987654;

sprintf(str2,"%d",a);

puts(str2);

return 0;

}

二、用c++中的stringstream類轉換

c++中的 庫定義了三種類:istringstream、ostringstream和stringstream,分別用來進行流的輸入、輸出和輸入輸出操作。

#include #include #include using namespace std;

int main(void)

; int a;

//string --> int

a = atoi(str1);

printf("%d\n",a);

//int -->string

a = 987654;

itoa(a,str2,10);

puts(str2);

return 0;

}

注意:itoa並不是乙個標準的c函式,不能在所有的編譯器中使用,如果要寫跨平台的程式,請用sprintf。

總結:三種方法的對比:

從效率對比來看:

method                          perfcount

[int] _tstoi() 34,802

[int] _stscanf() 233,264

[int] std::stringstream 1,553,689

[double] _tstof() 317,463

[double] _stscanf() 821,332

[double] std::stringstream 1,475,996

可以看出atoi類的方法效率最高,sscanf次之,stringstream最慢。

從型別安全性來看:

atoi類的輸入合法性難以檢驗,比如當無法轉換時返回0,使用者無法得知是真的為0,還是轉換失敗。

c++標準庫中的提供了比ansi c的更高階的一些功能,即單純性、型別安全和可擴充套件性,使得stringstream的轉換擁有型別安全和不會溢位這樣搶眼的特性。

假設你想用sprintf()函式將乙個變數從int型別轉換到字串型別。為了正確地完成這個任務,你必須確保證目標緩衝區有足夠大空間以容納轉換完的字串。此外,還必須使用正確的格式化符。如果使用了不正確的格式化符,會導致非預知的後果。下面是乙個例子:

int n=10000;

chars[10];

sprintf(s,」%d」,n);// s中的內容為「10000」

到目前為止看起來還不錯。但是,對上面**的乙個微小的改變就會使程式崩潰:

int n=10000;

char s[10];

sprintf(s,」%f」,n);// 錯誤地使用了%f格式化符來替代了%d。

在這種情況下,s在呼叫完sprintf()後包含了乙個不確定的字串。

而使用stringstream,由於n和s的型別在編譯期就確定了,所以編譯器擁有足夠的資訊來判斷需要哪些轉換。庫中宣告的標準類就利用了這一點,自動選擇所必需的轉換。而且,轉換結果儲存在stringstream物件的內部緩衝中。你不必擔心緩衝區溢位,因為這些物件會根據需要自動分配儲存空間。

Java字串與陣列,字串與整型之間的相互轉換

tochararray 方法 語法 public char tochararray 例項 split 和split 方法 語法 public string split string regex,int limit 引數 regex 正規表示式分隔符。limit 分割的份數。例項 valueof 方法...

字串與整數之間的轉換

最近經常用到字串與整數之間的轉換,整理了一下,包含 1 檢驗是否為整數 2 字串轉為整數 3 從字串中提取數字 直接上 檢查是否為int型別,已經對空進行處理 public static boolean isint string str 把字串轉化為整數,若轉化失敗,則返回0 param str字串...

陣列與字串 整數 字串之間的轉換

sscanf函式原型為int sscanf const char str,const char format,將引數str的字串根據引數format字串來轉換並格式化資料,轉換後的結果存於對應的引數內。具體功能如下 1 根據格式從字串中提取資料。如從字串中取出整數 浮點數和字串等。2 取指定長度的字...