C++字符串拼接和輸入


一 .char類型字符串以空字符結尾

  1.以空字符結尾,空字符被寫作\0,其ASCII碼為0,用來標記字符串的結尾。

  char dog[4]={'a','b','c','d'}   //不是一個字符串

  char cat[4]={'a','b','c','\0'} //是一個字符串

  這兩個都是char數組,空字符對c-風格字符串很重要。C++有很多處理字符串的函數,其中包括cout這些函數。他們都是逐個地處理字符串中的字符,直到遇到空字符為止。

  2.只需使用一個引號括起來的字符串即可,這種字符串稱為“字符串常量”或者"字符串字面值"

  char bird[11]="Mr.Cheeps";

  char fish[]="Bubbles";

  3.字符串常量(使用雙引號)不能 與字符常量(使用單引號)互換。

  字符常量:'S'是字符串編碼的簡寫,在ASCII系統上,表示為83. 即將83賦值給k.   char k='S';

  字符串常量:“S”,表示兩個字符(字符S和\0)組成的字符串。但“S”實際上表示的字符串所在的內存地址。如將內存地址賦值給k。char k="S";

二.字符串的拼接/輸入

  注:拼接時不會在被連接的字符串直接添加空格,第二個字符串的第一個字符,將第一個字符串的最后一個字符即(\0)取代。

  1.計算數組長度

  sizeof運算符指的是返回數組在內存中占用的字節數,用來計算類型或變量內存的大小(打印char類型數組里面括號的數值,注意有些時候需要計算\0符號),

   char arr[] = {'a','b','c','\0'}; sizeof(arr)===4

           char arr2[] = {'a','b','c'};//這種寫法不好,要記得加上字符串結束符'\0'。  sizeof(arr2)===3

           char arr3[20] = {'a','b','c','d','e','\0'};//sizeof(arr3)===20

           char arr4[] = "ab";//這里會自動在字符串尾部加上字符串結束符'\0',故數組arr4的長度為3. sizeof(arr4)===3

   sizeof可以用類型、函數做參數,strlen只能用char* 做參數,而且必須以'\0'結尾的。

  strlen()函數和size()函數返回字符串中真實有意義的字符的長度,結束符只是用於標記該字符串的結束,並無實際意義,所以不算在長度里面。strlen()與size()函數功能相似,但是句法不同。a不是被用作函數參數,而是位於函數名之前,他們之間用句點連接,如何string a ;int k=a.size(),這種句法表明,a是一個對象,而size()是一個類方法。方法是一個函數,只能通過其所屬類的對象進行調用。這里a是string對象,而size()是string類的一個方法。【sizeof()是這個運算符,size()是string類里面的函數】

  sizeof()對數組應用,得到的是數組的長度,而對真正應用,得到的是指針的長度,即使指針指向的是一個數組。

  2.字符串輸入

  使用函數cin從鍵盤輸入,cin使用空白(空格,制表符和換行符)來確定字符串的結束位置,意味着cin在獲取字符數組時只讀取一個單詞,讀取該單詞之后,cin將該單詞放到數組中,並自動添加一個\0符,如輸入的整個字符串是"New York”,則只將New讀入到數組中,因為有空格,而將York留在輸入隊列中.所以需要提供一個能夠讀取一行的函數(istream中的類提供了面向行的類成員函數)-->getline()和get()。這兩個函數都是讀取一行的輸入,直到遇到換行符。然而,getline()是丟棄換行符,而get()將換行符保留在輸入序列中

  (a).  getline()讀取整行,它使用通過回車鍵輸入的換行符來確定輸入結尾。兩個參數,第一個是輸入行的數組的名稱,第二個是讀取的字符數。如果參數為20,則函數最多讀取,19個字符,剩余的空間用於存儲自動在結尾處添加的空字符。getline()函數在讀取指定數目的字符串或遇到換行符時停止讀取。如cin.getline(name,20);

  (b).get()函數 ,,與getline()類似,它們接受的參數相同,解釋參數的方式也相同,並且都讀取到行尾。但get()並不再讀取並丟棄換行符,而是將其留在輸入隊列中。

  假設連續兩次調用get()函數,由於第一次調用后,換行符停留在輸入隊列中,因此第二次調用時看到的第一個字符便是換行符。因此get()認為已達到行尾,而沒有發現任何可讀的內容。這時候可以借助get()來把換行符讀取掉。

  eg.  cin.get(name,10);

    cin.get(school,10);//並不會輸入,因為讀取的是空字符串,

  eged: 

    cin.get(name,10);

    cin.get()

    cin.get(school,10);//因為上面一句,已經把\0讀取掉了。

  (c).兩則用處,get()使輸入更仔細,假設用get()將一行讀入數組中。如何知道停止讀取的原因是由於已經讀取了整行,而不是由於數組已填滿呢?查看下一個字符,如果是換行符,說明已經讀取了整行:否則,說明該行中還有其他輸入。

  3.字符串的拼接:頭文件include <cstring>

  strcpy(A,B)將字符串復制到字符數組中。將B復制給A

  strcat()將字符串附加到字符數組末尾。將A后面加上B

  

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM