C語言字符數組與C++中STL的string的區別

一、字符數組:直接使用,不需要引用頭文件

1、初始化:兩種方式

       

       第一種方式,數組中只有五個元素,但是第二種方式,賦予的是字符串常量,而字符串常量在C語言中約定用'\0'作爲字符串的結束標誌,它佔內存空間。這裏的"china"的有效長度爲 5 ,但實際上還有第 6 個字符'\0'。也就是說,當遇到'\0'時,表示字符串結束,由它前面的字符組成字符串。在程序中,常用'\0'來判斷字符串是否結束,因此所定義的字符數組長度應該大於字符串的實際長度,這樣才足以存放相應的字符串,這就是前面爲什麼寫 6 而不是 5 的原因

      注意,第二種方式,也就是將字符串常量直接賦值給字符數組僅限於初始化中,在程序中的其他位置不允許這樣!

2、字符數組的輸入輸出

      

      

     

    

    C語言有一批字符串處理函數,其中gets() 和 puts() 函數包含在頭文件 <stdio.h>中,其餘的包含在<string.h>中。

    

    

    

      注意:gets( )識別換行符\n作爲輸入結束,因此在使用gets( )前,一定要注意是不是有換行符會影響,如果有的話,應該先用getchar( )接收掉換行符,然後再用gets()

       如下:getchar( );

                gets(str);

       此外,如果不是使用scanf()函數的%s格式或者gets()函數輸入的字符串(因爲這兩種格式會自動在末尾加上’\0’, 而字符串常量在C語言中約定用'\0'作爲字符串的結束標誌),如果沒有’\0’,printf的%s格式和puts()函數會因爲無法識別字符串末尾而輸出一大堆亂碼。

       尤其是當使用getchar()來接收時,記得要在字符串末尾加上’\0’。(所以用getchar()或者%c來輸入字符串時,如果輸出的時候要用puts或者%s,那麼一定要記得字符串錄入的結尾要加上’\0’

       例如:

                       結果

%c也是一樣,

所以輸入:gets()  %s   輸出:puts()  %s 沒問題。因爲輸入時,那兩個會自動在末尾加’\0’

輸出是%c或者putchar(), 輸入是什麼樣都沒關係,因爲和字符串無關了,只是在輸出字符

但是如果輸入是字符,%c或者getchar(),而輸出想要是字符串puts()  %s,那麼一定要在輸入之後成爲每個字符串前,加上’\0’

 

2、字符數組的相關函數

       要用字符數組的函數時,需要加上頭文件#include<string.h>

       而C++的STL中的string的頭文件是#include<string>  using namespace std;

         

       輸出的時候還是需要用int型數據來接收的,int len=strlen(str);

       然後才能輸出,返回的是int類型的字符串中有意義的字符個數。

       結果也就是真正的有意義的字符個數:6

 

     

      直接接上,所以是 I am student   本身因爲str1中am後面有一個空格,所以接上是這樣的,如果是沒有空格,那麼也還是直接接上的,反正直接接在後面,什麼多餘的也不要做就對了

      因爲接好了之後賦給str1

      

      

      

      

      

      

二、字符數組:

       輸入直到文件末尾:

      

       但是,注意,當在黑框中輸入數據時,並不會觸發EOF狀態,所以需要手動觸發,按crtl+z組合鍵,這時就會顯示一個^Z,再按回車就可以結束while了

        codeblock中while(scanf("%d",&n)!=EOF)如何在控制檯終止循環輸入:

        執行後,控制檯輸入數字後,先換行,後ctrl+z,再換行可以退出,ps:該方法適用於codeblock,如果是其他編輯器,可以嘗試ctrl+c/d,但在codeblock試了要麼閃退,要麼無效(經過驗證,確實必須這樣!)

       

         

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章