# 1.string的用法
- string在<iostream>的頭中就有,但是還是得用<string>的頭
##### 構造函數
- str(const char* ch) 直接賦值
- str(size_t n,char ch) 賦值n個ch字符
- str(char* ch,size_t n) 取ch指針的前n位
- str(string& str,size_t index,size_t length) 從index開始取length位
- str(string& str) 拷貝構造
##### 函數
- char* c_str() 返回一個char*
- int size() 返回長度
- char at(int index) 返回字符,越界會進行try catch捕獲異常
- void insert(int index,string str)在index位置插入str
- void insert (int index,string str,int start,int end)在index位置插入截取str的
- void insert (int index,int count,char ch)在index位置插入count個的ch
- void append(string s) 增加字符串
- void erase(int start,int end) 擦除
- int compare(string str) 比較兩個對象,可以比較
- int find(string str) str子串的下標
- int find(string str,int startIndex) 從startIndex開始找一個子串下標
- string substr(int startIndex,int endIndex) 從startIndex到endIndex取子串
- void swap(string s) 交換兩個string
##### 運算符
- [int index] 獲得索引位置字符
- << 輸出
- \+ 連接
- == 進行判斷是否相等
- \>=,<=,>,<都可以使用
##### 迭代器
```
#include <iostream>
#include <string>
using namespace std;
void funIterator(){
string s="hello world";
string::iterator ite=s.begin();
while(ite!=s.end()){
cout<<*ite<<" ";
ite++;
}
}
int main(int argc, char** argv) {
funIterator();
return 0;
}
```
iterator相當於一個指針
##### 算法
**foreach**
```
#include <iostream>
#include <string>
#include <algorithm>
void fun(char c){
cout<< c;
}
void funForEach(){
string str("abcdefg");
for_each(str.begin(),str.end(),fun);
}
int main(int argc, char** argv) {
funForEach();
return 0;
}
```
所有算法包含在algorithm,for_each循環的用法:
for_each(str.begin(),str.end(),fun);
fun的參數是開始結束元素數組的單個元素
**sort**
```
string str("gfde");
sort(str.begin(),str.end());
```
從小到大排列
```
string str("gfde");
sort(str.begin(),str.end(),greater<char>());
```
從大到小排列`