一、string轉int的方式
採用最原始的string, 然後按照十進位制的特點進行算術運算得到int,但是這種方式太麻煩,這裡不介紹了。
採用標準庫中atoi函式。
string s = "12";
int a = atoi(s.c_str());
對於其他型別也都有相應的標準庫函式,比如浮點型atof(),long型atol()等等。
採用sstream標頭檔案中定義的字串流物件來實現轉換。
istringstream is("12"); //構造輸入字串流,流的內容初始化為「12」的字串
int i; is >> i; //從is流中讀入乙個int整數存入i中
二、int轉string的方式
採用標準庫中的to_string函式。
int i = 12;
cout << std::to_string(i) << endl;
不需要包含任何標頭檔案,應該是在utility中,但無需包含,直接使用,還定義任何其他內建型別轉為string的過載函式,很方便。
採用sstream中定義的字串流物件來實現。
ostringstream os; //構造乙個輸出字串流,流內容為空
int i = 12;
os << i; //向輸出字串流中輸出int整數i的內容
cout << os.str() << endl; //利用字串流的str函式獲取流中的內容
字串流物件的str函式對於istringstream和ostringstream都適用,都可以獲取流中的內容。
在c/c++語言中沒有專門的字串變數,通常用字元陣列來存放字串。字串是以「\0」作為結束符。c/c++提供了豐富的字串處理函式,下面列出了幾個最常用的函式。
● 字串輸出函式puts。
● 字串輸出函式gets。
● 字串連線函式strcat。
● 字串複製函式strcpy。
● 測字串長度函式strlen。
字串是面試的重點考查部分的相關知識,通過考查字串的相關知識可以考察程式設計師的程式設計規範以及程式設計習慣。並且其中包括了許多知識點,例如記憶體越界、指標與陣列操作等。許多公司在面試時會要求應聘者寫一段複製字串或字串子串操作的程式。本章列舉了一些與字串相關的面試題,有些題目要求較高的程式設計技巧。
6.1 數字與字串的轉化
應聘時經常出現數字與字串之間轉化的問題,面試官通過這類題目來考察應聘者能力,例如是否熟悉常用的庫函式,是否了解ascii碼以及是否了解字串的儲存格式等。
6.1.1 數字轉化為字串
面試例題1:使用庫函式將數字轉換為字串。
考點:c庫函式中數字轉換為字串的使用。
出現頻率:★★★
解析c語言提供了幾個標準庫函式,可以將任意型別(整型、長整型、浮點型等)的數字轉換為字串,下面列舉了各函式的方法及其說明。
● itoa():將整型值轉換為字串。
● ltoa():將長整型值轉換為字串。
● ultoa():將無符號長整型值轉換為字串。
● gcvt():將浮點型數轉換為字串,取四捨五入。
● ecvt():將雙精度浮點型值轉換為字串,轉換結果中不包含十進位制小數點。
● fcvt():指定位數為轉換精度,其餘同ecvt()。
還可以使用sprintf系列函式把數字轉換成字串,其比itoa()系列函式執行速度慢。下列程式演示了如何使用itoa()函式和gcvt()函式:
1 # include
2 # include
3
4 int main ()
5
程式輸出結果:
1 str_int: 435
2 str_double: 435.10001
● **第11行中的引數10表示按十進位制型別進行轉換,轉換後的結果是「435」,如果按二進位制型別進行轉換,則結果為「1101110011」。
● **第12行中的引數8表示精確位數,這裡得到的結果是「435.10001」。
答案可以使用atoi系列函式把數字轉換成字串。
面試例題2:不使用庫函式將整數轉換為字串。
出現頻率:★★★★
解析如果不使用atoi或sprintf等庫函式,可以通過把整數的各位上的數字加「0」轉換成char型別並存到字元陣列中。但是要注意,需要採用字串逆序的方法。如以下程式所示:
1 #include
2 using namespace std;
3
4 void int2str(int n, char *str)
5
15 while(temp)
16
20 len=i-1;
21 while(len>=0)
str[j++]=buf[len--];
str[j]='\0';
36 }
37
38 int main()
39
程式中的int2str函式完成了int型別到字串型別的轉換。在**第46行對int2str函式做了測試。程式的執行結果如下所示:
please input an integer: 1234
output: 1234
如果輸入的是個負數,程式執行結果如下所示:
please input an integer: -1234
output: -1234
接下來對int2str函式的實現進行分析。
● **第9行,把引數n的絕對值賦給temp,以後在計算各個位的整數時用temp,這樣保證在負數情況下取餘不會出現問題。
● **第11~第14行判斷str的有效性,str不為null。
● **第15~第19行的while迴圈中,將n的各個位存放到區域性陣列buf中,存放的順序與整數順序相反。例如n為整數123 456,while迴圈結束後buf應為「654 321」。
● **第21行計算轉換後字串的長度len,如果是負數,長度應該再加1。
● **第22~第31行把陣列buf中的非0元素逆向複製到引數str指向的記憶體中,如果n是負數,則str指向的第乙個記憶體存放負號。
6.1.2 字串轉化為數字
面試例題3:使用庫函式將字串轉換為數字。
考點:c庫函式中字串轉換為數字的使用。
出現頻率:★★★★
解析與上節數字轉換為字串類似,c/c++語言提供了幾個標準庫函式,可以將字串轉換為任意型別(整型、長整型、浮點型等)。以下列舉了各函式的方法及其說明。
● atof():將字串轉換為雙精度浮點型值。
● atoi():將字串轉換為整型值。
● atol():將字串轉換為長整型值。
● strtod():將字串轉換為雙精度浮點型值,並報告不能被轉換的所有剩餘數字。
● strtol():將字串轉換為長整值,並報告不能被轉換的所有剩餘數字。
● strtoul():將字串轉換為無符號長整型值,並報告不能被轉換的所有剩餘數字。
以下程式演示如何使用atoi ()函式和atof ()函式。
1 # include
2 # include
3
4 int main ()
5
輸出結果:
num_int: 435
num_double: 436.550000
面試例題4:不使用庫函式將字串轉換為數字。
出現頻率:★★★★
解析程式**如下:
//沒有進行溢位處理
1 #include
2 using namespace std;
3
4 int str2int(const char *str)
5
13 while(*str !=' \0')
14
19 temp = temp * 10 + (*str - '0'); //如果當前字元是數字則計算數值
20 str++; //移到下乙個字元
21 }
22 if (*ptr == '-') //如果字串是以「-」開頭,則轉換成其相反數
23
26
27 return temp;
28 }
29
30 int main()
31
程式執行結果:
輸入:1234
輸出:1234
輸入:-1234
輸出:-1234
輸入:+1234
輸出:1234
程式中的str2int函式作用是將字串轉換成整數。這個函式的轉換過程與例題2中的int2str函式相比更加簡單,它只需要做一次while迴圈(**第13行)就能把數值大小計算出來,如果結果是負數,就加乙個負號。
數字 int 轉字串和字串轉數字 int
室友去面試,問了乙個字串轉成數字的演算法題,室友沒搞出來,我心想,這個不是很簡單的嗎?於是動手在紙上畫了畫 畫完後,總感覺 不對,最後乙個個挖掘,才發現,尼瑪,這到處都是坑啊 特此記錄一下中坑心路。首先看一下數字轉成字串。輸入乙個整型數字,寫乙個函式,返回整型數字對應的字串形式。如 輸入 345 輸...
int和字串的型別轉換
string s1 1 拼接 1 少用 string s2 string.valueof 1 string.valueof 可以將引數轉換成string型別 string s3 integer tostring 2 將引數轉變為string型別 注 將string型別轉換為int型別時,如果stri...
C 中數字int到字串string的轉換
最近學習c 的演算法時,遇到了些問題,就是如何將數字轉換成字串呢?以下是 include 此處需要注意和 include的區別 是c版本的標頭檔案,也相當於,包含比如strcpy之類的字串函式,包不包含string這個要具體實驗,我的devc 是可以使用的,大家自己驗證下 string exchan...