C++用string 定义字符串数组
生活随笔
收集整理的這篇文章主要介紹了
C++用string 定义字符串数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[cpp] view plaincopy print? #include<iostream>???? #include<string>???? using?namespace?std;??? #include<iostream>
#include<string>
using namespace std; [cpp] view plaincopy print? int?main()?? {?? ????string?str;?? ????cout<<"please?input?the?str"<<endl;?? ????cin>>str;?? ????int?n=str.length();?????//??輸出字符串長度?? ????cout<<"str?length:"<<n<<endl;?? int main()
{string str;cout<<"please input the str"<<endl;cin>>str;int n=str.length(); // ?輸出字符串長度cout<<"str length:"<<n<<endl;
和其他類型變量一樣,字符串變量必須先定義后使用,定義字符串變量要用類名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輸出
字符串復制用賦值號
string1=string2;
其作用與“strcpy(string1,string2);”相同。 字符串連接用加號
string string1=″C++″; //定義string1并賦初值
string string2=″Language″;//定義string2并賦初值
string1=string1 + string2;//連接string1和string2
連接后string1為″C++ Language″。 字符串比較直接用關系運算符
可以直接用 ==(等于)、>(大于)、<(小于)、!=(不等于)、>=(大于或等于)、<=(小于或等于)等關系運算符來進行字符串的比較。
使用這些運算符比使用5.5.5節中介紹的字符串函數直觀而方便。
string name[5]; //定義一個字符串數組,它包含5個字符串元素
string name[5]={″Zhang″,″Li″,″Fun″,″Wang″,″Tan″};
//定義一個字符串數組并初始化
此時name數組的狀況如圖5.11所示。
圖5.11
關于字符串數組的幾點說明:在一個字符串數組中包含若干個(現為5個)元素,每個元素相當于一個字符串變量。 并不要求每個字符串元素具有相同的長度,即使對同一個元素而言,它的長度也是可以變化的,當向某一個元素重新賦值,其長度就可能發生變化。 在字符串數組的每一個元素中存放一個字符串,而不是一個字符,這是字符串數組與字符數組的區別。如果用字符數組存放字符串,一個元素只能存放一個字符,用一個一維字符數組存放一個字符串。 每一個字符串元素中只包含字符串本身的字符而不包括′\0′。
可見用字符串數組存放字符串以及對字符串進行處理是很方便的。
strcat(char[],const char[]);
strcat是string catenate(字符串連接)的縮寫。該函數有兩個字符數組的參數,函數的作用是:將第二個字符數組中的字符串連接到前面字符數組的字符串的后面。第二個字符數組被指定為const,以保證該數組中的內容不會在函數調用期間修改。連接后的字符串放在第一個字符數組中,函數調用后得到的函數值,就是第一個字符數組的地址。例如
char str1[30]=″People′s Republic of ″;
char str2[]=″China″;
cout<<strcat(str1,str2));//調用strcat函數
輸出:
People′s Republic of China
連接前后的狀況如圖5.10所示。
圖5.10
strcpy(char[],const char[]);
strcpy是string copy(字符串復制)的縮寫。它的作用是將第二個字符數組中的字符串復制到第一個字符數組中去,將第一個字符數組中的相應字符覆蓋。例如
char str1[10],str2[]=″China″;
strcpy(str1,str2);
執行后,str2中的5個字符″China″和′\0′(共6個字符)復制到數組str1中。
關于字符串復制函數strcpy的幾點說明:在調用strcpy函數時,第一個參數必須是數組名(如str1),第二個參數可以是字符數組名,也可以是一個字符串常量。 可以用strcpy函數將一個字符串中前若干個字符復制到字符數組中去。 只能通過調用strcpy函數來實現將一個字符串賦給一個字符數組,而不能用賦值語句將一個字符串常量或字符數組直接賦給一個字符數組。
strcmp(const char[],const char[]);
strcmp是string compare(字符串比較)的縮寫。作用是比較兩個字符串。由于這兩個字符數組只參加比較而不應改變其內容,因此兩個參數都加上const聲明。以下寫法是合法的:
strcmp(str1,str2);
strcmp(″China″,″Korea″);
strcmp(str1,″Beijing″);
比較的結果由函數值帶回:如果字符串1=字符串2,函數值為0。 如果字符串1>字符串2,函數值為一正整數。 如果字符串1<字符串2,函數值為一負整數。
字符串比較的規則與其他語言中的規則相同,即對兩個字符串自左至右逐個字符相比(按ASCII碼值大小比較),直到出現不同的字符或遇到′\0′為止。如全部字符相同,則認為相等;若出現不相同的字符,則以第一個不相同的字符的比較結果為準。
注意:對兩個字符串比較,不能用以下形式:
if(str1>str2) cout<<″yes″;
字符數組名str1和str2代表數組地址,上面寫法表示將兩個數組地址進行比較,而不是對數組中的字符串進行比較。對兩個字符串比較應該用
if(strcmp(str1,str2)>0) cout<<″yes″;
strlen(const char[]);
strlen是string length(字符串長度)的縮寫。它是測試字符串長度的函數。其函數的值為字符串中的實際長度,不包括′\0′在內。如
char str[10]=″China″;
cout<<strlen(str);
輸出結果不是10,也不是6,而是5。
以上是幾種常用的字符串處理函數,除此之外還有其他一些函數。
用字符數組來存放字符串并不是最理想和最安全的方法。
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類對象,可以不用這些函數,而直接用簡單的運算符。string1=string2;
其作用與“strcpy(string1,string2);”相同。
string string1=″C++″; //定義string1并賦初值
string string2=″Language″;//定義string2并賦初值
string1=string1 + string2;//連接string1和string2
連接后string1為″C++ Language″。
可以直接用 ==(等于)、>(大于)、<(小于)、!=(不等于)、>=(大于或等于)、<=(小于或等于)等關系運算符來進行字符串的比較。
使用這些運算符比使用5.5.5節中介紹的字符串函數直觀而方便。
三、字符串數組
不僅可以用string定義字符串變量,也可以用string定義字符串數組。如string name[5]; //定義一個字符串數組,它包含5個字符串元素
string name[5]={″Zhang″,″Li″,″Fun″,″Wang″,″Tan″};
//定義一個字符串數組并初始化
此時name數組的狀況如圖5.11所示。
圖5.11
關于字符串數組的幾點說明:
可見用字符串數組存放字符串以及對字符串進行處理是很方便的。
在定義字符串數組時怎樣給數組分配存儲空間呢?實際上,編譯系統為每一個字符串變量分配4個字節,在這個存儲單元中,并不是直接存放字符串本身,而是存放字符串的地址。在本例中,就是把字符串″Zhang″的地址存放在name[0],把字符串″Li″ 的地址存放在name[1],把字符串″Fun″的地址存放在name[2]……圖5.11只是一個示意圖。在字符串變量中存放的是字符串的指針(字符串的地址)。
一、字符串連接函數 strcat
其函數原型為strcat(char[],const char[]);
strcat是string catenate(字符串連接)的縮寫。該函數有兩個字符數組的參數,函數的作用是:將第二個字符數組中的字符串連接到前面字符數組的字符串的后面。第二個字符數組被指定為const,以保證該數組中的內容不會在函數調用期間修改。連接后的字符串放在第一個字符數組中,函數調用后得到的函數值,就是第一個字符數組的地址。例如
char str1[30]=″People′s Republic of ″;
char str2[]=″China″;
cout<<strcat(str1,str2));//調用strcat函數
輸出:
People′s Republic of China
連接前后的狀況如圖5.10所示。
圖5.10
二、字符串復制函數strcpy
其函數原型為strcpy(char[],const char[]);
strcpy是string copy(字符串復制)的縮寫。它的作用是將第二個字符數組中的字符串復制到第一個字符數組中去,將第一個字符數組中的相應字符覆蓋。例如
char str1[10],str2[]=″China″;
strcpy(str1,str2);
執行后,str2中的5個字符″China″和′\0′(共6個字符)復制到數組str1中。
關于字符串復制函數strcpy的幾點說明:
三、字符串比較函數strcmp
其函數原型為strcmp(const char[],const char[]);
strcmp是string compare(字符串比較)的縮寫。作用是比較兩個字符串。由于這兩個字符數組只參加比較而不應改變其內容,因此兩個參數都加上const聲明。以下寫法是合法的:
strcmp(str1,str2);
strcmp(″China″,″Korea″);
strcmp(str1,″Beijing″);
比較的結果由函數值帶回:
字符串比較的規則與其他語言中的規則相同,即對兩個字符串自左至右逐個字符相比(按ASCII碼值大小比較),直到出現不同的字符或遇到′\0′為止。如全部字符相同,則認為相等;若出現不相同的字符,則以第一個不相同的字符的比較結果為準。
注意:對兩個字符串比較,不能用以下形式:
if(str1>str2) cout<<″yes″;
字符數組名str1和str2代表數組地址,上面寫法表示將兩個數組地址進行比較,而不是對數組中的字符串進行比較。對兩個字符串比較應該用
if(strcmp(str1,str2)>0) cout<<″yes″;
四、字符串長度函數strlen
函數原型為strlen(const char[]);
strlen是string length(字符串長度)的縮寫。它是測試字符串長度的函數。其函數的值為字符串中的實際長度,不包括′\0′在內。如
char str[10]=″China″;
cout<<strlen(str);
輸出結果不是10,也不是6,而是5。
以上是幾種常用的字符串處理函數,除此之外還有其他一些函數。
總結
以上是生活随笔為你收集整理的C++用string 定义字符串数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为的发展与管理浅析
- 下一篇: C++之函数参数按引用传递