首先,為了在程式中使用string型別,必須包含標頭檔案 。如下:
#include注意這裡不是string.h,string.h是c字串標頭檔案。
string類是乙個模板類,位於名字空間std中,通常為方便使用還需要增加:
using namespace std;宣告乙個字串變數很簡單:
string str;測試**:
#include #include using namespace std;int main ( )
{ string str; //定義了乙個空字串str
str = "hello world"; // 給str賦值為"hello world"
char cstr = "abcde"; //定義了乙個c字串
string s1(str); //呼叫複製建構函式生成s1,s1為str的複製品
cout《程式執行結果為:
hello world
world
worabcde
abcaaaaa
hello
你可以用 ==、>、=、<=、和!=比較字串,可以用+或者+=操作符連線兩個字串,並且可以用獲取特定的字元。
#include #include using namespace std;
int main()
{ string str;
cout << "please input your name:"<> str;
if( str == "li" ) // 字串相等比較
cout << "you are li!"=、<=類似
cout << "your name should be ahead of li"《程式執行結果為:
please input your name:
zhang↙
you are not wang!
zhang, welcome!
zhang, welcome!
上例中,「 cout<< str[i]; 」可換為: cout<< str.at(i);
三、string特性描述
可用下列函式來獲得string的一些特性:
int capacity()const; //返回當前容量(即string中不必增加記憶體即可存放的元素個數)
int max_size()const; //返回string物件中可存放的最大字串的長度
int size()const; //返回當前字串的大小
int length()const; //返回當前字串的長度
bool empty()const; //當前字串是否為空
void resize(int len,char c); //把字串當前大小置為len,多去少補,多出的字元c填充不足的部分測試**:
#include #include using namespace std;int main()
{ string str;
if (str.empty())
cout<
str is null.
str is abcdefg
str's size is 7
str's capacity is 15
str's max size is 4294967294
str's length is 7
str is abcdefgccc
str is abcde
由於查詢是使用最為頻繁的功能之一,string提供了非常豐富的查詢函式:(注:string::npos)
size_type find( const basic_string &str, size_type index ); //返回str在字串中第一次出現的位置(從index開始查詢),如果沒找到則返回string::npos
size_type find( const char *str, size_type index ); // 同上
size_type find( const char *str, size_type index, size_type length ); //返回str在字串中第一次出現的位置(從index開始查詢,長度為length),如果沒找到就返回string::npos
size_type find( char ch, size_type index ); // 返回字元ch在字串中第一次出現的位置(從index開始查詢),如果沒找到就返回string::npos注意:查詢字串a是否包含子串b,不是用 stra.find(strb) > 0 而是 stra.find(strb) != string:npos 這是為什麼呢?(初學者比較容易犯的乙個錯誤)本部分參考自web100與luhao1993 先看下面的**
int idx = str.find("abc");上述**中,idx的型別被定義為int,這是錯誤的,即使定義為 unsigned int 也是錯的,它必須定義為 string::size_type。npos 是這樣定義的: static const size_type npos = -1; 因為 string::size_type (由字串配置器 allocator 定義) 描述的是 size,故需為無符號整數型別。因為預設配置器以型別 size_t 作為 size_type,於是 -1 被轉換為無符號整數型別,npos 也就成了該型別的最大無符號值。不過實際數值還是取決於型別 size_type 的實際定義。不幸的是這些最大值都不相同。事實上,(unsigned long)-1 和 (unsigned short)-1 不同(前提是兩者型別大小不同)。因此,比較式 idx == string::npos 中,如果 idx 的值為-1,由於 idx 和字串string::npos 型別不同,比較結果可能得到 false。因此要想判斷 find()等查詢函式的結果是否為npos,最好的辦法是直接比較。if (idx == string::npos);
測試**:
執行結果:
#include#includeusing namespace std;int main(){
int loc;
string s="study hard and make progress everyday! every day!!";
loc=s.rfind("make",10);
cout<
五、其他常用函式
string &insert(int p,const string &s); //在p位置插入字串s
string &replace(int p, int n,const char *s); //刪除從p開始的n個字元,然後在p處插入串s
string &erase(int p, int n); //刪除p開始的n個字元,返回修改後的字串
string substr(int pos = 0,int n = npos) const; //返回pos開始的n個字元組成的字串
void swap(string &s2); //交換當前字串與s2的值
void push_back(char c) //當前字串尾部加乙個字元c
const char *data()const; //返回乙個非null終止的c字元陣列,data():與c_str()類似,用於string轉const char*其中它返回的陣列是不以空字元終止,
const char *c_str()const; //返回乙個以null終止的c字串,即c_str()函式返回乙個指向正規c字串的指標, 內容與本string串相同,用於string轉const char*測試**:
#include #include using namespace std;
int main()
{ string str1 = "abc123defg";
string str2 = "swap!";
cout《程式執行結果為:
abc123defg
abcdefg
123abcdefg
123abcdefg123
123abcdefg123a
helloabcdefg123a
abcdefg
swap!
swap!
C STL string常用用法詳解
為了方便對字串進行操作,對字串常用的需求功能進行了封裝。要是有string,需加標頭檔案 include string str 1 通過下標訪問 2 通過迭代器訪問 需要注意定義 string iterator it include include using namespace std int m...
C STL string 簡單使用
define crt secure no warnings includeusing namespace std include include string 建構函式 string 建立乙個空的字串 例如 string str string const string str 使用乙個string物...
C STL string 使用筆記
拼接 直接用 1 str str1 str2 2 str str1 abc 3 str abc 4 str abc abc 前三種都合法,第四種不合法,即等號右邊最多只能出現乙個 abc 比較 直接符號比較,字典序 反向 reverse str.begin str.end 返回長度 str.size...