1. 程式人生 > 實用技巧 >stl常用容器-string

stl常用容器-string

stl常用容器-string

C++標準庫定義了一種string類,定義在標頭檔案<string>

string封裝了很多使用的辦法:

查詢find,拷貝copy,刪除delete,替換replace,插入insert

不用考慮記憶體釋放和越界,string管理char*分配的記憶體,每一次的string呼叫都由string類來處理,不用擔心複製,越界和取值越界的問題

建構函式

string();//建立一個空的字串 例如: string str;   
string(const string& str);//使用一個string物件初始化另一個string物件
string(const char* s);//使用字串s初始化
string(int n, char c);//使用n個字元c初始化

基本賦值操作

string& operator=(const char* s);//char*型別字串 賦值給當前的字串
string& operator=(const string &s);//把字串s賦給當前的字串
string& operator=(char c);//字元賦值給當前的字串
string& assign(const char *s);//把字串s賦給當前的字串
string& assign(const char *s, int n);//把字串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存取字元操作

char& operator[](int n);//通過[]方式取字元
char& at(int n);//通過at方法獲取字元

這裡如果採用[]來獲取的話當訪問越界的時候直接停止,如果採用at方法來處理就會返回一個異常

拼接操作

string& operator+=(const string& str);//過載+=操作符
string& operator+=(const char* str);//過載+=操作符
string& operator+=(const char c);//過載+=操作符
string& append(const char *s);//把字串s連線到當前字串結尾
string& append(const char *s, int n);//把字串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個字元c

查詢和替換

int find(const string& str, int pos = 0) const; //查詢str第一次出現位置,從pos開始查詢
int find(const char* s, int pos = 0) const; //查詢s第一次出現位置,從pos開始查詢
int find(const char* s, int pos, int n) const; //從pos位置查詢s的前n個字元第一次位置
int find(const char c, int pos = 0) const; //查詢字元c第一次出現位置
int rfind(const string& str, int pos = npos) const;//查詢str最後一次位置,從pos開始查詢
int rfind(const char* s, int pos = npos) const;//查詢s最後一次出現位置,從pos開始查詢
int rfind(const char* s, int pos, int n) const;//從pos查詢s的前n個字元最後一次位置
int rfind(const char c, int pos = 0) const; //查詢字元c最後一次出現位置
string& replace(int pos, int n, const string& str); //替換從pos開始n個字元為字串str
string& replace(int pos, int n, const char* s); //替換從pos開始的n個字元為字串s

rfind是從右往左查詢,find是從左往右查詢。

比較

/*
compare函式在>時返回 1,<時返回 -1,==時返回 0。
比較區分大小寫,比較時參考字典順序,排越前面的越小。
大寫的A比小寫的a小。
*/
int compare(const string &s) const;//與字串s比較
int compare(const char *s) const;//與字串s比較

子串

string substr(int pos = 0, int n = npos) const;//返回由pos開始的n個字元組成的字串

插入和刪除

string& insert(int pos, const char* s); //插入字串
string& insert(int pos, const string& str); //插入字串
string& insert(int pos, int n, char c);//在指定位置插入n個字元c
string& erase(int pos, int n = npos);//刪除從Pos開始的n個字元

string和c-style字串轉換

//string 轉 char*
string str = "itcast";
const char* cstr = str.c_str();
//char* 轉 string
char* s = "itcast";
string str(s);

const char *可以隱式的轉換為string

但是string不能隱式轉換為const char*

案例:分割字串

#include<iostream>
#include<string>
#include<vector>
using namespace std;
void main()
{
string temp[3];
string a = "www.baidu.com";
vector<string>b;//用b來儲存分隔開的字串
int pos;
pos = a.find(".");
temp[0] = a.substr(0, pos);
a = a.substr(pos+1, a.size());

pos = a.find(".");
temp[1] = a.substr(0, pos);
a = a.substr(pos+1, a.size());

temp[2] = a;
for (int i = 0; i < 3; i++)
{
b.push_back(temp[i]);
cout << temp[i] << endl;
}
}

案例:把string字串中的小寫字母全部變為大寫字母

//C語言版
//將小寫字母全部轉為大寫字母
#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
using namespace std;
void main()
{
string k = "asdasASDasdASD";
const char* p = k.c_str();
char* pp = (char*)p;
for (int i = 0; i < k.size(); i++)
{
if (pp[i] >= 97)
{
pp[i] -= 32;
}
}
printf("%s\n", pp);
}
//直接採用庫函式
#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
using namespace std;
void main()
{
string k = "asdasASDasdASD";
for (int i = 0; i < k.size(); i++)
{
str[i]=toupper(str[i]);
}
cout<<p<<endl;
}