程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 深刻解析C++中的字符數組和處置字符串的辦法

深刻解析C++中的字符數組和處置字符串的辦法

編輯:關於C++

深刻解析C++中的字符數組和處置字符串的辦法。本站提示廣大學習愛好者:(深刻解析C++中的字符數組和處置字符串的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解析C++中的字符數組和處置字符串的辦法正文


C++字符數組
用來寄存字符數據的數組是字符數組,字符數組中的一個元素寄存一個字符。字符數組具稀有組的配合屬性。因為字符串運用普遍,C和C++專門為它供給了很多便利的用法和函數。
字符數組的界說和初始化

界說字符數組的辦法與後面引見的相似。例如:

  char c[10];
  c[0]=′I′;c[1]=′ ′;c[2]=′a′;c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′;

下面界說了c為字符數組,包括10個元素。在賦值今後數組的狀況如圖所示。


對字符數組停止初始化,最輕易懂得的方法是逐一字符賦給數組中各元素。如

  char c[10]={'I',' ','a','m',' ','h','a','p','p','y'};


把10個字符分離賦給c[0]~c[9]這10個元素。

假如花括號中供給的初值個數年夜於數組長度,則案語法毛病處置。假如初值個數小於數組長度,則只將這些字符賦給數組中後面那些元素,其他的元素主動定為空字符。假如供給的初值個數與預定的數組長度雷同,在界說時可以省略數組長度,體系會主動依據初值個數肯定數組長度。如:

  char c[]={'I',' ','a','m',' ','h','a','p','p','y'};


也能夠界說和初始化一個二維字符數組,如
    char diamond[5][5]={{' ',' ','*'},{' ', '*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
字符數組的賦值與援用

只能對字符數組的元素賦值,而不克不及用賦值語句對全部數組賦值。如:

  char c[5];
  c={'C','h','i','n','a'}; //毛病,不克不及對全部數組一次賦值
  c[0]='C'; c[1]='h';c[2]='i';c[3]='n';c[4]='a'; //對數組元素賦值,准確

假如已界說了a和b是具有雷同類型和長度的數組,且b數組已被初始化,請剖析:

  a=b; //毛病,不克不及對全部數組全體賦值
  a[0]=b[0]; //准確,援用數組元素

【例】設計和輸入一個鑽石圖形。

#include <iostream>
using namespace std;
void main( )
{
  char diamond[][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
  int i,j;
  for (i=0;i<5;i++)
  {
   for (j=0;j<5;j++)
   cout<<diamond[i][j]; //逐一援用數組元素,每次輸入一個字符
   cout<<endl;
  }
}

C++處置字符串的辦法—字符串類與字符串變量
用字符數組來寄存字符串其實不是最幻想和最平安的辦法。

C++供給了一種新的數據類型——字符串類型(string類型),在應用辦法上,它和char、int類型一樣,可以用來界說變量,這就是字符串變量——用一個名字代表一個字符序列。

現實上,string其實不是C++說話自己具有的根本類型,它是在C++尺度庫中聲明的一個字符串類,用這類類可以界說對象。每個字符串變量都是string類的一個對象。
字符串變量的界說和援用

1) 界說字符串變量
和其他類型變量一樣,字符串變量必需先界說後應用,界說字符串變量要用類名string。如:

  string string1; //界說string1為字符串變量
  string string2=″China″; //界說string2同時對其初始化

應該留意:要應用string類的功效時,必需在本文件的開首將C++尺度庫中的string頭文件包括出去,即應加上

  #include <string> //留意頭文件名不是string.h

2) 對字符串變量的賦值
在界說了字符串變量後,可以用賦值語句對它付與一個字符串常量,如:

  string1=″Canada″;


既可以用字符串常量給字符串變量賦值,也能夠用一個字符串變量給另外一個字符串變量賦值。如:

  string2=string1; //假定string2和string1均已界說為字符串變量


不請求string2和string1長度雷同,假設string2本來是″China″,string1本來是″Canada″,賦值後string2也釀成″Canada″。在界說字符串變量時不需指定長度,長度隨個中的字符串長度而轉變。

可以對字符串變量中某一字符停止操作,如:

  string word=″Then″; //界說並初始化字符串變量word
  word[2]=′a′; //修正序號為2的字符,修正後word的值為″Than″

3) 字符串變量的輸出輸入
可以在輸出輸入語句頂用字符串變量名,輸出輸入字符串,如:

  cin>> string1; //從鍵盤輸出一個字符串給字符串變量string1
  cout<< string2; //將字符串string2輸入


字符串變量的運算

在上一節中可以看到: 在以字符數組寄存字符串時,字符串的運算要用字符串函數,如strcat(銜接)、strcmp(比擬)、strcpy(復制),而對string類對象,可以不消這些函數,而直接用簡略的運算符。

1) 字符串復制用賦值號

  string1=string2;

其感化與“strcpy(string1,string2);”雷同。

2) 字符串聯接用加號

  string string1=″C++″; //界說string1並賦初值
  string string2=″Language″;//界說string2並賦初值
  string1=string1 + string2;//銜接string1和string2


銜接後string1為″C++ Language″。

3) 字符串比擬直接用關系運算符
可以直接用 ==(等於)、>(年夜於)、<(小於)、!=(不等於)、>=(年夜於或等於)、<=(小於或等於)等關系運算符來停止字符串的比擬。
字符串數組

不只可以用string界說字符串變量,也能夠用string界說字符串數組。如:

  string name[5]; //界說一個字符串數組,它包括5個字符串元素
  string name[5]={″Zhang″, ″Li″, ″Fun″, ″Wang″, ″Tan″}; //界說一個字符串數組並初始化

此時name數組的狀態如圖所示。


關於字符串數組的幾點解釋:
在一個字符串數組中包括若干個(現為5個)元素,每一個元素相當於一個字符串變量。
其實不請求每一個字符串元素具有雷同的長度,即便對統一個元素而言,它的長度也是可以變更的,當向某一個元素從新賦值,其長度便可能產生變更。
在字符串數組的每個元素中寄存一個字符串,而不是一個字符,這是字符串數組與字符數組的差別。假如用字符數組寄存字符串,一個元素只能寄存一個字符,用一個一維字符數組寄存一個字符串。
每個字符串元素中只包括字符串自己的字符而不包含′\0′。

可見用字符串數組寄存字符串和對字符串停止處置是很便利的。

在界說字符串數組時如何給數組分派存儲空間呢?現實上,編譯體系為每個字符串變量分派4個字節,在這個存儲單位中,其實不是直接寄存字符串自己,而是寄存字符串的地址。在本例中,就是把字符串″Zhang″的地址寄存在name[0],把字符串″Li″ 的地址寄存在name[1],把字符串″Fun″的地址寄存在name[2]……上只是一個表示圖。在字符串變量中寄存的是字符串的指針(字符串的地址)。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved