国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

探討數組與字符串輸入的問題(C++版)

2020-05-23 14:16:48
字體:
來源:轉載
供稿:網友

本文對C++數組與字符串輸入的問題進行了探討,需要的朋友可以參考下

對于字符串問題,原來理解的不夠深刻,現在討論一些關于字符串輸入的問題

探討數組與字符串輸入的問題(C++版)

1.strlen() 返回的是數組中的字符串的長度,而不是數組本身的長度。

2.strlen()只計算可見的字符,而不把空字符計算在內。

那么更有意思的在后面:

 

 
  1. char name[16] = "abcdefg"
  2. //輸出結果是多少? 
  3. cout << name << endl; 
  4. name[3] = '/0'
  5. //輸出結果又是多少? 
  6. cout << name << endl;  

大家猜猜 ?

 

 
  1. # include <iostream> 
  2. # include <cstring> 
  3. # define SIZE 15 
  4. using namespace std; 
  5. int main(void
  6. char name_cin[SIZE]; 
  7. char name[SIZE] = "C++owboy"//initialized array 
  8. cout << "Hello I'm " << name; 
  9. cout << "! What is your name ? "
  10. cin >> name_cin; 
  11. cout << "Well " << name_cin << ", your name has "
  12. cout << strlen(name_cin) << " letters and is stored " << endl; 
  13. cout << "in an array of " << sizeof(name_cin) << "bytes." << endl; 
  14. cout << "your initial is " << name_cin[0] << "." << endl; 
  15. name[3] = '/0'
  16. cout << "Here are the first 3 characters of my name : "
  17. cout << name << endl; 
  18. return 0; 

大家猜猜結果呢?

探討數組與字符串輸入的問題(C++版)

name字符串被截斷了...

釋義:

數組可以用索引來訪問數組的各個字符,例如name[0]找到數組的第一個字符,name[3] = '/0'; 設置為空字符,使得這個字符串在第三個字符后面即結束,即使數組中還有其他字符。

探討數組與字符串輸入的問題(C++版)

不過cin有個缺陷,就是以空白符為結束標志,如果遇到空格和回車就把這個字符串輸入完了,這樣就需要用能輸入一行字符串的方法來解決,但是先看看這個問題:

 

 
  1. # include <iostream> 
  2. using namespace std; 
  3. int main(void
  4. const int ArSize = 20; 
  5. char name[ArSize]; 
  6. char dessert[ArSize]; 
  7. cout << "Enter your name : " << endl; 
  8. cin >> name; //輸入名字 
  9. cout << "Enter your favorite dessert: " << endl; 
  10. cin >> dessert; //輸入甜點的名字 
  11. cout << "I have some delicious " << dessert; 
  12. cout << " for you, " << name << "." << endl; 
  13. return 0; 

探討數組與字符串輸入的問題(C++版)

釋義:

cin使用空白(空格、制表符、換行符)來定字符串的邊界,cin在獲取字符數組輸入時只讀取第一個單詞,讀取單詞后,cin將該字符串放到數組中,并自動在結尾添加空字符'/0'

cin把Meng作為第一個字符串,并放到數組中,把Liang放到輸入隊列中第二次輸入時,發現輸入隊列Liang,因為cin讀取Liang,并將它放到dessert數組中

這時如果能輸入一行數據,這個問題不就解決了嗎?

getline()、get()可以實現...

 

 
  1. # include <iostream> 
  2. using namespace std; 
  3. int main(void
  4. const int ArSize = 20; 
  5. char name[ArSize]; 
  6. char dessert[ArSize]; 
  7. cout << "Enter you name : " << endl; 
  8. cin.getline(name,ArSize); 
  9. cout << "Enter you favorite dessert : " << endl; 
  10. cin.getline(dessert,ArSize); 
  11. cout << "I have some delicious " << dessert; 
  12. cout << " for you," << name << endl; 
  13. return 0; 

探討數組與字符串輸入的問題(C++版)

釋義:

cin是將一個單詞作為輸入,而有些時候我們需要將一行作為輸入,如 I love C++

iostream中類提供了一些面向行的類成員函數,如getline()和get(),這兩個都是讀取一行的輸入,直到換行符結束,區別是getline()將丟棄換行符

get()將換行符保留在輸入序列中

面向行的輸入:getline(char* cha,int num)

getline()讀取整行,通過換行符來確定結尾,調用可以使用 cin.getline(char* cha,int num),成員函數的方式使用,第一個參數是用來存儲輸入行的數組的名稱,第二個參數是要讀取的字符數,如果這個字符數的參數為30,則最多讀入29個字符,余下的用于存儲自動在結尾處添加的空字符。

get()存儲字符串的時候,用空字符結尾。

如果遇到這種情況咋辦?

 

 
  1. # include <iostream> 
  2. using namespace std; 
  3. int main(void
  4. cout << "What year was your house built? " << endl; 
  5. int year; 
  6. cin >> year; 
  7. //char ch; 
  8. //cin.get(ch); 接收換行符 (cin >> year).get(); 
  9. cout << "What is its street address ? " << endl; 
  10. char address[80]; 
  11. cin.getline(address, 80); 
  12. cout << "Year built : " << year << endl; 
  13. cout << "Address : " << address << endl; 
  14. cout << "Done ! " << endl; 
  15. return 0; 

探討數組與字符串輸入的問題(C++版)

地址還沒有輸入,就結束了...

去掉上面的注意,加一個字符,接收換行符就可以了...

注:C++程序常使用指針而不是數組來處理字符串

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天台县| 花莲市| 肃宁县| 沐川县| 出国| 怀来县| 高密市| 车致| 汉寿县| 沐川县| 乌恰县| 牡丹江市| 蒙自县| 水城县| 米易县| 曲周县| 沂源县| 乐清市| 沙田区| 扎赉特旗| 北辰区| 武鸣县| 邯郸市| 吉林市| 化德县| 淮阳县| 英德市| 紫金县| 南华县| 当雄县| 信宜市| 临沂市| 敦化市| 正蓝旗| 巴青县| 陵川县| 乐平市| 新邵县| 宁南县| 开远市| 玉山县|