stl常用容器-string
阿新 • • 發佈:2020-12-20
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;
}
}
//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;
}