C++標準模版庫STL——String
技術標籤:Are You OKay C/C++標準模版庫STL整理c++字串程式人生
標準庫型別String
標準庫型別string表示可變長的字元序列,使用string型別必須首先包含string標頭檔案。作為標準庫的一部分,string定義在名稱空間std中。
String的常見用法詳解
通過下標訪問
C++程式碼:
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
string str = "abcd";
for(int i = 0; i < str.length(); i++)
{
printf("%c ", str[i]);
}
return 0;
}
執行結果:
如果要讀入和輸出整個字串,則只能用cin和cout
c_str()
可以將string型別轉換為字串陣列進行輸出
C++程式碼:
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
string str = "abcd";
printf("%s\n", str.c_str());
return 0;
}
執行結果:
通過迭代器訪問
C++程式碼:
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
string str = "abcd";
for(string::iterator it = str.begin(); it != str.end(); it++)
{
printf("%c ", *it);
}
return 0;
}
Attention!!!
在STL中,只有string和vector,支援直接對迭代器進行加減某個數字,如str.begin() + 3
string常用函式例項解析
operator +=
兩個string可以直接拼接
示例C++程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1 = "abc", str2 = "xyz", str3;
str3 = str1 + str2;
str1 += str2;
cout << str1 << endl;
cout << str3 << endl;
return 0;
}
執行結果:
compare operator
兩個string型別可以直接使用==、!=、<、<=、>、>=比較大小,比較規則是字典序
length()、size()
返回string的長度
C++示例程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1 = "abc", str2 = "xyz", str3;
str3 = str1 + str2;
str1 += str2;
cout << str1 << endl;
cout << str3 << endl;
cout << str1.length() << endl;
cout << str1.size() << endl;
return 0;
}
執行結果:
insert()
insert(pos,string),在pos號位置插入字串string
C++程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "abcxyz", str2 = "opq";
str.insert(3, str2);
cout << str << endl;
return 0;
}
執行結果:
insert(it,it2,it3),it為原字串欲插入位置,it2和it3為待插字串的首尾迭代器,用來表示串[it2,it3)將被插在it的位置上
C++示例程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "abcxyz", str2 = "opq";
str.insert(str.begin() + 3, str2.begin(), str2.end());
cout << str << endl;
return 0;
}
執行結果:
erase()
刪除單個元素
C++示例程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "abcxyz", str2 = "opq";
str.erase(str.begin() + 4);
cout << str << endl;
return 0;
}
執行結果:
刪除一個區間內的所有元素
C++程式碼示例:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "abcdefg";
str.erase(str.begin() + 2, str.end() - 1);
cout << str << endl;
return 0;
}
執行結果:
str.erase(pos,length)
pos為開始刪除的起始位置,length為刪除的字元個數
C++示例程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "abcdefg";
str.erase(3, 2);
cout << str << endl;
return 0;
}
執行結果:
clear()
清空string中的資料
C++示例程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "abcdefg";
str.clear();
cout << str.length() << endl;
return 0;
}
執行結果:
substr()
substr(pos,len)返回從pos號位開始、長度為len的子串
示例C++程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "Welcome to Changsha!";
cout << str.substr(0, 5) << endl;
cout << str.substr(14, 4) << endl;
return 0;
}
執行結果:
string::npos
常數-1
示例C++程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
if(string::npos == -1)
{
cout << "-1 is true." << endl;
}
return 0;
}
執行結果:
find()
str.find(str2),當str2是str的子串時,返回其在str中第一次出現的位置;如果str2不是str的子串,那麼返回string::npos
str.find(str2,pos),從str的pos號位開始匹配str2,返回值與上相同
C++示例程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "Thank you for your smile.";
string str2 = "you";
string str3 = "me";
if(str.find(str2) != string::npos)
{
cout << str.find(str2) << endl;
}
if(str.find(str2, 7) != string::npos)
{
cout << str.find(str2, 7) << endl;
}
if(str.find(str3) != string::npos)
{
cout << str.find(str3) << endl;
}
else
{
cout << "I know there is no position for me." << endl;
}
return 0;
}
執行結果:
replace()
str.replace(pos,len,str2)把str從pos號位開始、長度為len的子串替換為str2
str.replace(it1,it2,str2)把str的迭代器[it1,it2)範圍內的子串替換為str2
示例C++程式碼:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str = "Maybe you will turn around.";
string str2 = "will not";
string str3 = "surely";
cout << str.replace(10, 4, str2) << endl;
cout << str.replace(str.begin(), str.begin() + 5, str3) << endl;
return 0;
}
執行結果: