簡介:在C語言中只提供了一個char類型來處理字符,而對於字符串只能通過字符串數組處理,有些不太方便。C++STL提供了string基本字符系列容器來處理字符串,可以把string理解爲字符串類,它提供有刪除、添加、替換、查找、比較等方法。
一. String向量容器的用法
- 使用string容器,需要頭文件“#include<string> ”。
- 創建string對象 string s;
- 給string對象複製(兩種方法)
- string s; s=”hello”;//直接給字符串賦值
- string s; /*
char a[100]; .
scanf(“%s”,&ss); .
s=ss; */把字符指針賦給一個字符串對象(比較常用)
二. String常用函數方法總結:
getline(cin,s); // 輸入一行字符串
getline(cin,s,c); // 輸入到字符c爲止的字符串
a+b; // 將字符串b連接到字符串a之後
s.begin(); // 返回字符串s的起始地址
s.end(); // 返回字符串s的結束地址
s.size(); // 返回字符串s的長度
s.length(); // 返回字符串s的長度
s.empty(); // 字符串a爲空返回true;否則返回false
s.compare(b); // 比較字符串s,b;s大,返回1;b大,返回-1;相等,返回0
reverse(s.begin(),s.end()); // 將字符串s從首到尾反向排列
printf(s.c_str()); // 用c_str()方法將字符串s用printf輸出
s.erase(p); // 清除地址p的一個字符
s.erase(p,n); // 清除從地址p開始的n個字符
s.erase(p,q); // 清除從地址p開始到地址q結束的字符
s.insert(n,a); // 在字符串s第n個位置插入字符串a
s.insert(n,a,m); // 在字符串s第n個位置插入字符串a的前m個字符
s.insert(n,m,c); // 在字符串s第n個位置插入m個字符c
s.replace(m,n,a); // 將字符串s第m個位置開始往後的n個字符替換爲字符串a
s.replace(m,n,s,x,y); // 替換爲字符串s中第x個位置開始往後的y個字符
s.replace(m,n,s,n); // 替換爲字符串s的前n個字符
s.replace(m,n,x,c); // 替換爲x個字符c
s.find(c); // 返回a中第一次出現字符c的位置
s.rfind(c); // 返回a中最後一次出現字符c的位置
stoi(s); // 字符串s轉換爲int類型
stol(s); // 字符串s轉換爲long int類型
stoul(s); // 字符串s轉換爲unsigned long int類型
stoll(s); // 字符串s轉換爲long long int類型
stoul(s); // 字符串s轉換爲unsigned long long int類型
stof(s); // 字符串s轉換爲float類型
stod(s); // 字符串s轉換爲double類型
stold(s); // 字符串s轉換爲long double類型
1.在string對象尾部添加字符
在string對象的尾部添加一個字符(char),可用“+”。
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s;
s=s+'a';
s=s+'b';
s=s+'c';
s=s+'1';
cout<<s<<endl;
return 0;
}
結果如下:
2.在string對象尾部追加字符串
有兩種方式:1,直接用“+”;2,用append()方法。注:用append()比直接加更高效,運算更快。因爲每次使用“+”,都是重新建立了一個string對象,而append(),是直接在原有的對象上進行操作。
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s,n,m,p;
s="abc";
s=s+"123";
n.append("xyz");
n.append("789");
m.append(n+"456");
p.append(s+n);
cout<<s<<endl;
cout<<n<<endl;
cout<<m<<endl;
cout<<p<<endl;
return 0;
}
結果如下:
3.插入字符與刪除string中的元素
使用insert()把字符插入到迭代器位置之前。
使用erase()刪除迭代器所指的元素或一個區間中的所有元素。
清空一個字符串,可以直接給它賦空字符串。
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s,n,m,p;
s="123456";
cout<<s[0]<<endl;//輸出string中的首元素
cout<<s[0]-'1'<<endl;//兩個相同的字符相減值爲0
string::iterator it;//定義迭代器變量it
it=s.begin(); //迭代器位置爲字符串首
s.insert(it+1,'a');//將字符串'a'插入到第一個字符前(注:字符位置從0開始計數)
cout<<s<<endl;
s.erase(it+4);//刪除第四個元素,即下標爲4的元素。(注:下標從0開始,下同)
cout<<s<<endl;
s.erase(it,it+4);//刪除0~4區間裏的元素,即1,a,2,3
cout<<s<<endl;
s="";//清空字符串
cout<<s.length()<<endl;//輸出字符串的長度
return 0;
}
結果如下:
4.替換與搜索string對象的元素或字符串
使用replace()可以替換string對象中的字符。
使用find()可以查找字符串中的第一個字符元素(用單引號界定)或者子串(用雙引號界定)。
empty()可以判斷字符串是否爲空,如果爲空,則返回邏輯真,即1;否則,返回邏輯假,即0。
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s,n;
s="123456";
s.replace(3,2,"aaa");//從第3個開始,連續2個字符替換爲“aaa”
cout<<s<<endl;
n="app cpp all";
cout<<n.find('a')<<endl;//查找第一個字符‘a’;返回下標值
cout<<n.find("a")<<endl;//查找第一個子串“a”;返回下標值
cout<<n.find("app")<<endl;//查找第一個子串“app”;返回下標值
cout<<n.find("cpp")<<endl;//查找第一個子串“cpp”;返回下標值
cout<<n.find("ddd")<<endl;//找不到子串“ddd”;返回4294967295
cout<<"判斷字符串是否爲空:"<<s.empty()<<endl;//判斷字符串是否爲空,不爲空返回0
s="";//清空字符串
cout<<endl;
cout<<"清空字符串後:"<<s.empty()<<endl;//爲空返回1
return 0;
}
結果如下:
5.reverse反向排序
用reverse可以將string容器迭代器所指向的一段區間中元素(字符)反向排序。
使用reserve()需要聲明頭文件“#include<algorithm>”。
#include<string>
#include<iostream>
#include<algorithm>//reverse需要此頭文件聲明
using namespace std;
int main()
{
string s;
s="123456789";
reverse(s.begin(),s.end ());//對123456789反向排序
cout<<s<<endl;
reverse(s.begin(),s.begin()+4);//對987654321中的9876區間反向排序
cout<<s<<endl;
return 0;
}
結果如下:
6.compare()比較
使用compare()與其他字符串比較大小,如果它比對方大,則返回1;如果它比對方小,則返回-1;如果相同,則返回0;(注:按照ASCLL碼錶的順序對字符串從前到後依次比較,字符順序大的那個字符串較大)
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s;
s="abcd";
cout<<s.compare("abc")<<endl;//s比"abc"字符串大,返回1
cout<<s.compare("abcd")<<endl;//s與"abcd"字符串相等,返回0
cout<<s.compare("abce")<<endl;//s比"abce"字符串小,返回-1
cout<<s.compare("z")<<endl;//s比"z"字符串小,返回-1
return 0;
}
結果如下:
7.String對象與字符數組相互操作
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s;
char a[100];
printf("輸入一個字符串: ");
scanf("%s",&a);
s=a;//將字符數組賦值給字符串
printf(s.c_str());//用printf輸出字符串,需要用“c_str()”
cout<<endl;
printf("%s\n",a);//用printf輸出字符數組
cout<<s<<endl;//用cout輸出字符串
cout<<a<<endl;//用cout輸出字符數組
return 0;
}
結果如下: