字符數組、字符串與string問題與應用

一、簡單介紹相關問題

      聲明一下,我們從C風格和C++風格來分類討論字符串問題。

      首先說一說C語言中的字符數組與字符串它們所表現的不同點問題:

      char str[7] = {‘n’,’i’,’h’,’a’,’o’}

      char str[5] = {‘n’,’i’,’h’,’a’,’o’}

      char str[] = {“nihao”}

      char str[] = “nihao”

      首先看第一行,數組一共是7個字節的空間大小,實際上有意義的只有5個字符,另外兩個位置無法確定其值。再看第二行,數組正好就是是5個字節的空間大小,沒有後邊的多餘字符。第三行和第四行其實是等價的,只是寫法不同,它們佔用的空間是幾個字節呢?答案是6個,因爲末尾系統自動添加了空字符'/0'

      前兩行是純正的字符數組,而後兩行就是C風格的字符串了,即用字符數組表示字符串。另外,也可以通過指針來定義一個字符串,比如:char * pstr = “nihao”。

      再來看看C++語言中字符串相關問題。

   C++提供了3中表示C風格字符串的方法:字符數組、字符串常量、字符串指針。他們的類型都是char* (char指針),因此被自動作爲char*類型參數傳遞給函數。字符串函數通過檢測空值字符來確定字符串的結尾。

      在C++中我們可以用C風格的字符串,這個是兼容的,並且在<cstring>庫中還提供了很多C風格的字符串操作函數:

          字符串複製函數:char *strcpy(char *s,const char ct)

          串連接函數:char *strcat(char *s,const char *ct)

          字符串比較函數:int strcmp(const char *cs,const char ct)

          字符串長度函數:int strlen(const char *s)

      除了C風格的字符串,C++還有自己的標準字符串類<string>,比如說string str = “hello”,對應的也提供了很多操作string的函數

   另外,注意一下下邊這個:

     char name1[20] = "DreamerWay";

     cout<<sizeof(name1)<<endl;

     cout<<strlen(name1)<<endl;

   第一個輸出是20而第二個輸出是10,也就是說sizeof輸出的數組所佔空間大小而strlen輸出的是數組中存儲的字符串的長度。

二、應用(主要針對C風格的字符數組、字符串)

      1、字符指針作爲函數的形參

      void  (char *from, char *to)

      {    

         for(; *form != '\0'; from++, to++)

           *to = *from;

        *to = '\0';

      }

      2、字符數組作爲函數的形參

      void copy_string(char from[], char to[])

      {

          int i=0;

          while(from[i] != '\0')

          { to[i] = from[i]; i++; }

          to[i] = '\0';

      }

      3、字符輸入輸出

      char str[80], *p;

      p = gets(str);

      puts(p);

      puts(str);

      4、字符串作爲函數形參

      void copy_s(char *str1,char *str2)

      {

          while((*str2=*str1)!='\0')

         {

            str1++;

            str2++;

         }

      }

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