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_