c++string詳解
string作為一個類出現,它整合的操作函式足以完成我們大多數情況下(甚至是100%)的需要,我們可以用=進行賦值操作,==進行比較,+做連線。可以把他看成c++基本資料型別。
1.標頭檔案#include<string>
2宣告一個c++字串:string str;
string類的建構函式和解構函式如下:
(a)string s;生成一個空字串
(b)string s(str)拷貝建構函式,生成str的複製品
(c)string s(str,stridx)將字串str內始於位置stridxde部分當做字串初值
(d)string s(str,stridx,strlen)將str始於stridx且長度頂多為strlen的部分當做字串初值
(e)string s(cstr)將c字串作為s的初值
(f)string s(chars,chars_len)將c串前chars_len個字元作為s初值
(g)string s(num,c)生成包含num個c字串
(h)string s(beg,end)以區間beg,end(不包含end)內字元作為s初值
(i)s.~string()銷燬所有字元,釋放記憶體
3.字串操作函式
(a)=,assign()賦值
(b)swap()交換兩個串的內容
(c)+=,append(),push_back()在尾部新增字元
(d)insert()插入字元
(e)erase()刪除字元
(f)clear()刪除全部字元
(g)replace()替換字元
(h)+串聯字元
(i)==,!=,<,<=,>,>=,compare()比較字串
(j)size(),length()返回字元數量
(k)max_size()返回字元可能的最大個數
(l)empty()判斷串是否為空
(m)capacity()返回重新分配之前的字元容量
(n)reserve()保留一定量記憶體容量一定數量的字元
(o)[ ],at()存取單一字元
(p)>>,getline()從stream讀取某值
(q)<< 將某值寫入stream
(r)copy()將某值賦值為一個c_string
(s)c_str() 將內容以c_string返回
(t)data() 將內容以字元陣列形式返回
(u)substr()返回某個子字串
(v)find()查詢函式
(w)begin(),end()提供類似stl迭代器支援
(x)rbegin(),rend()逆向迭代器
(y)get_allocator()返回配置器
4.c++字串和c字串轉換
c++串轉c串的方法是:data(),c_str(),copy(),其中,data()以字元陣列形式返回字串內容,不新增'\0'。c_str()返回一個以‘\0’結尾的字元陣列。copy()把字串內容複製到已有的c_string或字元陣列內。
5.大小和容量函式
(a)現有的字元數:size()和length()。empty()用來檢查串是否為空。
(b)max_size()這個大小是指當前c++串最多包含的字元數,和機器有關,我們不用關心。
(c)capacity()重新分配之前string所包含的最大字元數。這裡需要另一個函式reserve(),為string重新分配記憶體。大小由其引數決定,預設0,這會對string進行非強制性縮減。
6.元素存取
[ ],at()(0~s.length()-1)
string str(“string”)
str[3];str.at(3);
7.比較函式
(>,>=,<,<=,==,!=)
另一個功能強大比較函式compare(),返回一個整數表示比較結果,0:相等;>0: 大於;<0:小於。
string s(“abcd”);
s.compare(“abcd”)返回0
s.compare(“dbca”)返回>0值
s.compare(“ab”)返回<0值
s.compare(0,2,s,2,2);用ab和cd進行比較
8.改變內容
首先:賦值
=:
s=ns,s=“gaint”,s=‘j’。
assign():
s.assign(str);
s.assign(str,1,3);
s.assign(str,2,string::npos)把字串str從索引值2到結尾賦給s
s.assign(“gaint”);
s.assign(“nico”,5);
s.assign(5,‘x’)把5個x賦給s。
把字串清空方法:s="";s.clear();s.erase()。
string提供很多函式:插入(insert),刪除(erase),替換(replace),增加字元(+=,append(),push_back())。
s+=str;
s+="my ";
s+='a';
s.append(str);
s.append(str,1,3);
s.append(str,2,string::npos);
s.append("my");
s.append("nico",5);
s.append(5,'x');
下面我們首先從一些示例開始學習下string類的使用.
1)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s("hehe");
cout<<s<<endl;
cin.get();
}
2)
#include <string>
#include <iostream>
using namespace std;
void main()
{
char chs[] = "hehe";
string s(chs);
cout<<s<<endl;
cin.get();
}
3)
#include <string>
#include <iostream>
using namespace std;
void main()
{
char chs[] = "hehe";
string s(chs,1,3); //指定從chs的索引1開始,最後複製3個位元組
cout<<s<<endl;
cin.get();
}
4)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s1("hehe");
string s2(s1);
cout<<s2<<endl;
cin.get();
}
5)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s1("hehe",2,3);
string s2(s1);
cout<<s2<<endl;
cin.get();
}
6)
#include <string>
#include <iostream>
using namespace std;
void main()
{
char chs[] = "hehe";
string s(chs,3); //將chs前3個字元作為初值構造
cout<<s<<endl;
cin.get();
}
7)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s(10,'k'); //分配10個字元,初值都是'k'
cout<<s<<endl;
cin.get();
}
//以上是string類例項的構造手段,都很簡單.
9)
//賦新值
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s(10,'k'); //分配10個字元,初值都是'k'
cout<<s<<endl;
s = "hehehehe";
cout<<s<<endl;
s.assign("kdje");
cout<<s<<endl;
s.assign("fkdhfkdfd",5); //重新分配指定字串的前5的元素內容
cout<<s<<endl;
cin.get();
}
10)
//swap方法交換
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s1 = "hehe";
string s2 = "gagaga";
cout<<"s1 : "<<s1<<endl;
cout<<"s2 : "<<s2<<endl;
s1.swap(s2);
cout<<"s1 : "<<s1<<endl;
cout<<"s2 : "<<s2<<endl;
cin.get();
}
11)
//+=,append(),push_back()在尾部新增字元
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "hehe";
s += "gaga";
cout<<s<<endl;
s.append("嘿嘿"); //append()方法可以新增字串
cout<<s<<endl;
s.push_back('k'); //push_back()方法只能新增一個字元...
cout<<s<<endl;
cin.get();
}
12)
//insert() 插入字元.其實,insert運用好,與其他的插入操作是一樣的.
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "hehe";
s.insert(0,"頭部"); //在頭部插入
s.insert(s.size(),"尾部"); //在尾部插入
s.insert(s.size()/2,"中間");//在中間插入
cout<<s<<endl;
cin.get();
}
13)
#include <string>
#include <iostream>
using namespace std;
void main()
{
string s = "abcdefg";
s.erase(0,1); //從索引0到索引1,即刪除掉了'a'
cout<<s<<endl;
//其實,還可以使用replace方法來執行刪除操作
s.replace(2,3,"");//即將指定範圍內的字元替換成"",即變相刪除了
cout<&