1. 程式人生 > >C++string類常用的操作函式

C++string類常用的操作函式

#include <iostream>
#include <string>//必須包含該C++標頭檔案

using namespace std;

int main()
{
    //string物件的初始化,也就是建構函式與解構函式方面的知識
    /*
    string s;  //生成一個空字串s
    string s(str); //拷貝建構函式 生成str的複製品
    string s(str, stridx); //將字串str內“始於位置stridx”的部分當作字串的初值
    string s(str, stridx, strlen); //將字串str內“始於stridx且長度頂多strlen”的部分作為字串的初值
    string s(cstr); //將C字串作為s的初值
    string s(chars, chars_len); //將C字串前chars_len個字元作為字串s的初值。
    string s(num, c); //生成一個字串,包含num個c字元
    string s(beg, end); //以區間beg;end(不包含end)內的字元作為字串s的初值
    s.~string(); //銷燬所有字元,釋放記憶體
    */
//string類的begin,end,rbegin,rend的用法,返回的是迭代器,不是簡單的陣列下標,迭代器,反向迭代器 string str; str = "abcdefg higklmn"; string::iterator beginIter = str.begin(); string::iterator endIter = str.end(); string::reverse_iterator rbeginIter = str.rbegin(); string::reverse_iterator rendIter = str.rend(); cout
<< *beginIter << endl; //cout << *endIter << endl;//錯誤,end()函式指向字串末尾的\0的後面一個位置,無法輸出 cout << *(endIter - 1) << endl;//這就對了 cout << *rbeginIter << endl;//同上,只不過是反過來的而已 cout << *(rendIter - 1) << endl; for (string::iterator iter = beginIter; iter != endIter; ++iter)//用迭代器與反向迭代器遍歷
cout << *iter; cout << endl; for (string::reverse_iterator rev_iter = rbeginIter; rev_iter != rendIter; ++rev_iter) cout << *rev_iter; cout << endl; //size()與length()函式,都是返回字串的長度(不包括尾部的‘\0’) int size = str.size(); int length = str.length(); cout << size << " " << length << endl; //字串可能的最大大小max_size() int maxSize1 = str.max_size(); cout << maxSize1 << endl; //string s1; //int maxSize2 = s1.max_size(); //cout << maxSize2 << endl; //字串的容量capacity() cout << str.capacity() << endl; string s2; cout << s2.capacity() << endl; //判空empty() bool isEmpty = str.empty(); if (isEmpty) cout << "為空!" << endl; else cout << "不為空!" << endl; string s3; isEmpty = s3.empty(); if (isEmpty) cout << "為空!" << endl; else cout << "不為空!" << endl; //operator[] 取第幾個元素,相當於陣列 cout << str[0] << endl; for (int i = 0; i < str.size(); ++i) cout << str[i]; cout << endl; //標準庫的string類提供了3個成員函式來從一個string得到c型別的字元陣列:c_str()、data()、copy(p, n)。 const char* c; string s4 = "1234"; c = s4.c_str(); cout << c << endl; //輸出:1234 s4 = "abcd"; cout << c << endl; //輸出:abcd const char* c1; string s5 = "1234"; c1 = s5.data(); cout << c1 << endl; //輸出:1234 s5 = "abcd"; cout << c1 << endl; //輸出:abcd //operator= 賦值操作符,字串可以直接賦值 string s6 = "hahahaha"; string s7; s7 = s6; cout << s7 << endl; //reserve函式 函式reserve()將字串的容量設定為至少size. //如果size指定的數值要小於當前字串中的字元數(亦即size < this→size()), 容量將被設定為可以恰好容納字元的數值 string s8 = "1234"; cout << s8.capacity() << endl; s8.reserve(32);//10,20,30,40,50等等 cout << s8.capacity() << endl; //swap 交換函式,交換兩個字串 string s9 = "aaa"; string s10 = "bbb"; swap(s9, s10); cout << s9 << " " << s10 << endl; //reverse函式,字串翻轉 string s11 = "123"; reverse(s11.begin(), s11.end()); cout << s11 << endl; reverse(s11.begin(), s11.begin() + 3); cout << s11 << endl; //insert函式 //string的成員函式insert有以下多種過載: //string &insert(int p0, const char *s); ——在p0位置插入字串s //string &insert(int p0, const char *s, int n); ——在p0位置插入字串s的前n個字元 //string &insert(int p0, const string &s); ——在p0位置插入字串s //string &insert(int p0, const string &s, int pos, int n); ——在p0位置插入字串s從pos開始的連續n個字元 //string &insert(int p0, int n, char c);//在p0處插入n個字元c //iterator insert(iterator it, char c);//在it處插入字元c,返回插入後迭代器的位置 //void insert(iterator it, const_iterator first, const_iteratorlast);//在it處插入從first開始至last-1的所有字元 //void insert(iterator it, int n, char c);//在it處插入n個字元c string s12 = "aaaaaaaaa"; char* s13 = "bbb"; s12 = s12.insert(0, s13); s12 = s12.insert(1, s13, 2); string s14 = "ccc"; s12 = s12.insert(3, s14); string s15 = "dddde"; s12 = s12.insert(5, s15, 2, 3); s12 = s12.insert(6, 3, 'f'); string::iterator iter = s12.begin(); iter++; string::iterator iter2 = s12.insert(iter, 'g'); cout << *iter2 << endl; cout << s12 << endl; //append函式是向string 的後面追加字元或字串 //(1)向string 的後面加C - string string s16("Hello "); // s=”Hello ” const char* c3 = "Out There "; s16.append(c3); // s=”Hello Out There” cout << s16 << endl; //(2)向string 的後面加C-string 的一部分 string s17("Hello "); // s=”Hello ” const char *c4 = "Out There "; s17.append(c4, 3); // s=”Hello Out” cout << s17 << endl; //(3)向string 的後面加string(有兩種方法) string s18("Hello "), s19("Wide "), s20("World "); s18.append(s19); // s1=”Hello Wide” s18 += s20; // s1=”Hello Wide World” cout << s18 << endl; //(4)向string 的後面加string 的一部分 ---A string s21("Hello "), s22("Wide World "); s21.append(s22, 5, 5); // s1=”Hello World” cout << s21 << endl; //(5)向string 的後面加string 的一部分 ---B string str1f("Hello "), str2f("Wide World"); str1f.append(str2f.begin() + 5, str2f.end()); cout << str1f << endl; //(6)向string 的後面加多個字元 string str1e("Hello "); str1e.append(4, '!'); // s1=”Hello !!!!” cout << str1e << endl; //push_back,類似於vector中的在尾部新增元素 str1e.push_back(')'); cout << str1e << endl; //賦值運算子=,等於,不等於大於小於,+=,<<等都能直接使用 //erase函式,刪除字串中字元的函式 /*erase函式的原型如下: (1)string& erase(size_t pos = 0, size_t n = npos); (2)iterator erase(iterator position); (3)iterator erase(iterator first, iterator last); 也就是說有三種用法: (1)erase(pos, n); 刪除從pos開始的n個字元,比如erase(0, 1)就是刪除第一個字元 (2)erase(position); 刪除position處的一個字元(position是個string型別的迭代器) (3)erase(first, last); 刪除從first到last之間的字元(first和last都是迭代器) */ str1e.erase(0, 2); cout << str1e << endl; str1e.erase(str1e.begin()); cout << str1e << endl; str1e.erase(str1e.begin() + 3, str1e.end() - 2);//不包括最後一個迭代器 cout << str1e << endl; //clear()函式,清空字串 str1e.clear(); cout << str1e.size() << endl;//為0 //resize()函式,分配空間大小 str1e.resize(10); cout << str1e.length() << endl;//空間大小為10 //assign()函式,C++ string 類的成員函式,用於拷貝、賦值操作, //它們允許我們順次地把一個 string 物件的部分內容拷貝到另一個 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迭代器之間的部分賦給字串 */ char* c5 = "aaa"; string s23; s23.assign(c5); cout << s23 << endl; char* c6 = "bbbbbb"; s23 = s23.assign(c6, 3); cout << s23 << endl; string s24 = "ccc"; s23 = s23.assign(s24); cout << s23 << endl; s23.assign(3, 'd'); cout << s23 << endl; s23 = s23.assign("eeee", 0, 3); cout << s23 << endl; string s25 = "fff"; s23 = s23.assign(s25.begin(), s25.end()); cout << s23 << endl; //repalce函式,用於替換 /*用法一: *用str替換指定字串從起始位置pos開始長度為len的字元 *string& replace (size_t pos, size_t len, const string& str); */ string line1 = "[email protected] [email protected] a test string!"; line1 = line1.replace(line1.find("@"), 1, ""); //從第一個@位置替換第一個@為空 cout << line1 << endl; /*用法二: *用str替換 迭代器起始位置 和 結束位置 的字元 *string& replace (const_iterator i1, const_iterator i2, const string& str); */ string line2 = "[email protected] [email protected] a test string!"; line2 = line2.replace(line2.begin(), line2.begin() + 6, "heihei "); //用str替換從begin位置開始的6個字元 cout << line2 << endl; /*用法三: *用substr的指定子串(給定起始位置和長度)替換從指定位置上的字串 *string& replace (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen); */ string line3 = "[email protected] [email protected] a test string!"; string substr = "12345"; line3 = line3.replace(0, 5, substr, substr.find("1"), 3); //用substr的指定子串(從1位置數共3個字元)替換從0到5位置上的line cout << line3 << endl; /*用法四:string轉char*時編譯器可能會報出警告,不建議這樣做 *用str替換從指定位置0開始長度為5的字串 *string& replace(size_t pos, size_t len, const char* s); */ string line4 = "[email protected] [email protected] a test string!"; char* str111 = "12345"; line4 = line4.replace(0, 5, str111); //用str替換從指定位置0開始長度為5的字串 cout << line4 << endl; /*用法五:string轉char*時編譯器可能會報出警告,不建議這樣做 *用str替換從指定迭代器位置的字串 *string& replace (const_iterator i1, const_iterator i2, const char* s); */ string line5 = "[email protected] [email protected] a test string!"; char* str222 = "12345"; line5 = line5.replace(line5.begin(), line5.begin() + 9, str222); //用str替換從指定迭代器位置的字串 cout << line5 << endl; /*用法六:string轉char*時編譯器可能會報出警告,不建議這樣做 *用s的前n個字元替換從開始位置pos長度為len的字串 *string& replace(size_t pos, size_t len, const char* s, size_t n); */ string line6 = "[email protected] [email protected] a test string!"; char* str333 = "12345"; line6 = line6.replace(0, 9, str333, 4); //用str的前4個字元替換從0位置開始長度為9的字串 cout << line6 << endl; /*用法七:string轉char*時編譯器可能會報出警告,不建議這樣做 *用s的前n個字元替換指定迭代器位置(從i1到i2)的字串 *string& replace (const_iterator i1, const_iterator i2, const char* s, size_t n); */ string line7 = "[email protected] [email protected] a test string!"; char* str444 = "12345"; line7 = line7.replace(line7.begin(), line7.begin() + 9, str444, 4); //用str的前4個字元替換指定迭代器位置的字串 cout << line7 << endl; /*用法八: *用重複n次的c字元替換從指定位置pos長度為len的內容 *string& replace (size_t pos, size_t len, size_t n, char c); */ string line8 = "[email protected] [email protected] a test string!"; char c111 = '1'; line8 = line8.replace(0, 9, 3, c111); //用重複3次的c字元替換從指定位置0長度為9的內容 cout << line8 << endl; /*用法九: *用重複n次的c字元替換從指定迭代器位置(從i1開始到結束)的內容 *string& replace (const_iterator i1, const_iterator i2, size_t n, char c); */ string line9 = "[email protected] [email protected] a test string!"; char c222 = '1'; line9 = line9.replace(line9.begin(), line9.begin() + 9, 3, c222); //用重複3次的c字元替換從指定迭代器位置的內容 cout << line9 << endl; //find函式,查詢,返回目標的頭位置的索引,否則返回string::npos //size_type find(const string & str, size_type pos = 0) const; //size_type find(const char * s, size_type pos = 0) const; //size_type find(const char * s, size_type pos = 0, size_type n) const; //size_type find(const char ch, size_type pos = 0) const; //rfind()查詢子字串或字元最後一次出現的位置。 //find_first_of()方法在字串中查詢引數中任何一個字元或字串首次出現的位置 //find_last_of()方法在字串中查詢引數中任何一個字元或字串最後一次出現的位置 string s111("1a2b3c4d5e6f7jkg8h9ija2b3c4d5e6f7g8ha9i"); string::size_type position; position = s111.find("jk", 0);//返回第一個出現的位置,從0開始 if (position != string::npos) cout << position << endl; else cout << "Can't find!" << endl; string flag = "c"; position = s111.find_first_of(flag); printf("s.find_first_of(flag) is :%d\n", position); position = s111.find_last_of(flag); printf("s.find_last_of(flag) is :%d\n", position); //從字串s 下標5開始,查詢字串b ,返回b 在s 中的下標 position = s111.find("b", 5); cout << "s111.find(b,5) is : " << position << endl; position = s111.rfind("c");//查詢最後一個出現的位置,也就是反向查詢第一次出現的位置, //通常我們可以這樣來使用,當正向查詢與反向查詢得到的位置不相同說明子串不唯一。 if (position != string::npos) cout << position << endl; flag = "a";//查詢所有的位置 position = 0; int i = 1; while ((position = s111.find(flag, position)) != string::npos) { cout << "position " << i << " : " << position << endl; position++; i++; } //substr函式,得到子串,三種用法 string x = "Hello_World"; cout << x.substr() << endl;//擷取整個串 cout << x.substr(5) << endl;//從位置5開始擷取子串 cout << x.substr(0, 5) << endl;//從位置0開始,擷取長度為5的子串 //compare()函式,前面減去後面的ASCII碼,>0返回1,<0返回-1,相同返回0 string str1("green apple"); string str2("red apple"); string str3("apple"); if (str3.compare("apple") == 0)//直接整個比較 cout << str3 << " is an apple!" << endl; if (str1.compare(str2) != 0) cout << str1 << " is not " << str2 << endl; if (str1.compare(6, 5, "apple") == 0)//從位置6開始比較,比較5個字元 cout << "still, " << str1 << " is an apple!" << endl; if (str2.compare(str2.size() - 5, 5, "apple") == 0) cout << "and " << str2 << " is also an apple!" << endl; if (str1.compare(6, 5, str2, 4, 5) == 0)//從str1的位置6,str2的位置4開始比較 cout << "therefore, both are apples!" << endl; string a("aBcdef"); string b("AbcdEf"); string c123("123456"); string d("123dfg"); //下面是各種比較方法 //前面減去後面的ASCII碼,>0返回1,<0返回-1,相同返回0 //完整比較a和b int m = a.compare(b); //“Bcdef”和“AbcdEf”的比較,比較a和b的從1到5位,b剩下的不要比較 int n = a.compare(1, 5, b); //“Bcdef”和“Ef”的比較 int p = a.compare(1, 5, b, 4, 2); //"123"和“123”的比較 int q = c123.compare(0, 3, d, 0, 3); cout << "m=" << m << ",n=" << n << ",p=" << p << ",q=" << q << endl; //getline函式,從輸入流中讀入一行,以換行符\n結束 system("pause"); return 0; }

相關推薦

C++ string常用函式

 字串是一種線性表,有著廣泛的應用,比如:文字編輯 、 情報檢索 、 拼寫檢查 、 網際網路搜尋引擎和自然語言翻譯等。 string append(const char *s);              &n

C++string常用操作函式

#include <iostream> #include <string>//必須包含該C++標頭檔案 using namespace std; int main() { //string物件的初始化,也就是建構函式與解構函式

String操作的過載實現及String常用成員函式

文章目錄 1,string 類操作的過載實現 2,String類提供的其他常用成員函式 1,string 類操作的過載實現 /* string 類操作的過載實現 */ class CMyStrin

C++string常用函式

string類的建構函式:string(const char *s);    //用c字串s初始化string(int n,char c);     //用n個字元c初始化此外,string類還支援預設建構函式和複製建構函式,如string s1;string s2="hel

Java String常用函式及用法

一、字串轉化為字元陣列  toCharArray() 程式碼:char[] a=string.toCharArray(); 二、將字串轉化為數字 1,轉化為整數 int a=Integer.valueOf(string); 2,轉化成實數 double a=Do

C++ String的建構函式、拷貝建構函式的實現

建構函式、解構函式與賦值函式是每個類最基本的函式,在一些公司的面試中也會經常問到這方面的問題。每個類只有一個解構函式和一個賦值函式,但可以有多個建構函式(包含一個拷貝建構函式,其它的稱為普通建構函式)。對於任意一個類A,如果不手動編寫上述函式,C++編譯器將自動為類A生成四

string常用操作

函式find_first_of()和 find_last_of() 執行簡單的模式匹配,如在字串中查詢單個字元c。函式find_first_of() 查詢在字串中第1個出現的字元c,而函式find_last_of()查詢最後一個出現的c。匹配的位置是返回值。如果沒有匹配發生,則函式返回-1.int find_

java String常用操作

1.String物件內容的比較 Str1.equals(Str2) Str1.equalsIgnoreCase(Str2) == 比較的是引用,而equals()比較的是內容 2.String型別與其他型別的相互轉換 a.String轉int int myInt = In

C++string常用介面說明,深淺拷貝

標準庫中的string類 string是表示字串的字串類 該類的介面與常規容器的介面基本相同,再添加了一些專門用來操作string的常規操作。 string在底層實際是:basic_string模板類的別名,typedef basic_string<char,ch

C++ string 部分成員函式實現(實現COW copy-on-write)

雖然標題中說實現了COW,但是事實上是很浪費的,並且命名也很不標準,程式碼也非常小學生,畢竟初學(給自己找藉口.jpg),以後應該還會把這篇找出來認真修改一下的。 Mystring.h: #pragma once #ifndef _MYSTRING_H_ #define

C++String 中的常用函式

下面推薦一些字串的題目 hdoj 2017 字串中統計數字,直接呼叫上面s.digit()函式 hdoj 1020  判斷輸出重複、水題、 hdoj 1062 逆轉字串 注意1:getchar()吸收3後'\n',2:空格不止有一個 hdoj 1039,字串處理,清晰思路,可以寫三個判斷條件的3個函式,呼叫函

C++string常用函式

1、string 類的物件可以直接賦值   string &operator=(const string &s); 2、string &operator+=(const string &s); 3、還可以直接用運算子“>”,“<”

c++ string 及其常用方法

包結構:#include<string>//c++標頭檔案     注意:在c中的標頭檔案為#include<string.h>名稱空間using namespace std;string類中的方法(加粗字型為常用方法):字串構造方法(初始化):str

c++實現String(建構函式,解構函式,複製建構函式,各類運算子過載函式的編寫)

編寫類 String 的建構函式,解構函式,複製建構函式  需要過載下面的運算子: 1、<、>、==和!=比較運算子 2、+=連線運算子和賦值運算子 3、<<輸出運算子和>>輸入運算子 String.h #ifndef _STRING

String和StringBuffer常用操作

String類是字串常量,是不可更改的常量。而StringBuffer是字串變數,它的物件是可以擴充和修改的。StringBuffer在進行字串處理時,不生成新的物件,在記憶體使用上要優於String類。所以在實際使用時,如果經常需要對一個字串進行修改,例如插入、刪除等操

C++string常用方法

在使用string類時,需要包含標頭檔案 #include<string>,並且引入using std::string; using std::wstring; 或 using namespace std; 下面你就可以使用string/w

C++ string的一些成員函式

string &replace(int p0, int n0,const char *s);//刪除從p0開始的n0個字元,然後在p0處插入串sstring &replace(int p0, int n0,const char *s, int n);//刪除p0開始的n0個字元,然後在p0處插

c++string常用方法詳解

     大部分程式都要頻繁地對字串進行操作,而c++的string類對字串進行了很強大的封裝,方便我們使用,但我常常忘了一些函式的用法,故查詢文章,轉載過來,供查詢用。 要想使用標準C++中string類,必須要包含#include <string>// 注意

C# Directory操作

所有 stat director pub 文件 book 訪問 rect pat Directory類位於System.IO 命名空間。Directory類提供了在目錄和子目錄中進行創建移動和列舉操作的靜態方法。此外,你還可以訪問和操作各種各樣的目錄屬性,例如創建或

c++ string的完整實現!!!

class sun double ref basic 更新 方便 iterator locate 本文實現了c++ STL中的basic_string模板類,當然。通過typedef也就實現了string類和wstring類。限於篇幅,實現代碼中用到了標準庫的char_