C++相對於C語言,大大增強了對字串的支援,除了可以使用C風格的字串,還可以使用內建的資料類型string,string類處理起來字串因為函數的封裝就顯得特別方便,下面我們統計一下string類的函數
首先,想調用string類先包含其標頭檔#include <string>
string s1;//變數s1隻是定義但沒有初始化,所以其預設值為""即Null 字元串string s2="Hello World!";//變數s2在定義時同時被初始化/*string類的變數可以相互之間直接賦值,不需要像C語言一樣,使用strcpy()函數一個字元一個字元的去賦值*///例如string s3=s2;//此時s3的內容和s2一樣也是Hello World!//如果需要定義一個由很多相同字元組成的字串時,還有另外的簡便寫法string s4(int n,char c);//s4是被初始化為由n的字元c組成的字串
關於求字串的長度,在C語言中,我們就可以使用strlen()函數求,C++中同樣可以使用strlen(s3);這種方法求出s3字串的實際長度,但是因為C++關於string類與C語言有本質區別,所以我們一般調用string.length()函數來求字串的長度
int len=0;len=string.length(s3);cout<<"s3字串的長度為"<<len<<endl;
在上面我們提到,如果將一個string類字串賦值給另一個string類字串,只需要直接賦值就可以了,但是如果是string類賦值給char*類或者是char*類賦值給string類該怎麼辦呢?當然是不能直接賦值的,直接看代碼
//string類賦值給string類string s1="hello world";string s2;s2=s1;//string類賦值給char*類string s1="hello world";char str[20]={0};strcpy_s(str,s1.c_str());//char*類賦值給string類char str[20]="hello world";string s2;s2=str;
同時,string類型的變數也可以使用字元數組的操作來改變其裡面的某一個變數,例如
#include <iostream>#include <string>string s1="this is my house";int i;//如果我們現在想改變裡面某一個字元,可以直接將s1當成數組,找到對應的下標來改變i=6;s[i]='t';//這樣就可以將第6個字元改成t了
有了 string 類,我們可以使用”+“或”+=“運算子來直接拼接字串,非常方便,再也不需要使用C語言中的 strcat()、strcpy()、malloc() 等函數來拼接字串了,再也不用擔心空間不夠會溢出了,用”+“來拼接字串時,運算子的兩邊可以都是 string 字串,也可以是一個 string 字串和一個C風格的字串,還可以是一個 string 字串和一個 char 字元。
string類的賦值
string &operator=(const string &s);//把字串s賦給當前字串 string &assign(const char *s);//用c類型字串s賦值string &assign(const char *s,int n);//用c字串s開始的n個字元賦值string &assign(const string &s);//把字串s賦給當前字串string &assign(int n,char c);//用n個字元c賦值給當前字串string &assign(const string &s,int start,int n);//把字串s中從start開始的n個字元賦給當前字串string &assign(const_iterator first,const_itertor last);//把first和last迭代器之間的部分賦給字串
string的串連
string &operator+=(const string &s);//把字串s串連到當前字串的結尾 string &append(const char *s);//把c類型字串s串連到當前字串結尾string &append(const char *s,int n);//把c類型字串s的前n個字元串連到當前字串結尾string &append(const string &s); //同operator+=()string &append(const string &s,int pos,int n);//把字串s中從pos開始的n個字元串連到當前字串的結尾string &append(int n,char c); //在當前字串結尾添加n個字元cstring &append(const_iterator first,const_iterator last);//把迭代器first和last之間的部分串連到當前字串的結尾
string的子串string substr(int pos = 0,int n = npos) const;//返回pos開始的n個字元組成的字串
void swap(string &s2); //交換當前字串與s2的值
string的尋找
rfind() 和 find() 很類似,同樣是在字串中尋找子字串,不同的是 find() 函數從第二個參數開始往後尋找,而 rfind() 函數則最多尋找到第二個參數處,如果到了第二個參數所指定的下標還沒有找到子字串,則返回一個無窮大值4294967295
int find(char c, int pos = 0) const;//從pos開始尋找字元c在當前字串的位置int find(const char *s, int pos = 0) const;//從pos開始尋找字串s在當前串中的位置int find(const char *s, int pos, int n) const;//從pos開始尋找字串s中前n個字元在當前串中的位置int find(const string &s, int pos = 0) const;//從pos開始尋找字串s在當前串中的位置int rfind(char c, int pos = npos) const;//從pos開始從後向前尋找字元c在當前串中的位置int rfind(const char *s, int pos = npos) const;int rfind(const char *s, int pos, int n = npos) const;int rfind(const string &s,int pos = npos) const;//從pos開始從後向前尋找字串s中前n個字元組成的字串在當前串中的位置,成功返回所在位置,失敗時返回string::npos的值
string類的插入函數:
string &insert(int p0, const char *s);string &insert(int p0, const char *s, int n);string &insert(int p0,const string &s);string &insert(int p0,const string &s, int pos, int n);//前4個函數在p0位置插入字串s中pos開始的前n個字元string &insert(int p0, int n, char c);//此函數在p0處插入n個字元citerator insert(iterator it, char c);//在it處插入字元c,返回插入後迭代器的位置void insert(iterator it, const_iterator first, const_iterator last);//在it處插入[first,last)之間的字元void insert(iterator it, int n, char c);//在it處插入n個字元c
關於C++中string類對象的用法,今天講了一點基礎。