---
# System prepended metadata

title: 第十二周 字串處理

---

# 第十二周 字串處理

標頭檔 string.h 宣告許多字串 (string) 處理相關的函數 (function) ，包括拷貝、相接、搜尋、測試相等、計算長度等。

以 str 起頭的函數作為處理字串之用，另有以 mem 起頭的函數，這些函數則可以進行記憶體區塊的操

## 練習
### 說明:
練習string 類別的字串處理函式：ㄅCstr(）、append(）、substr(）、compare()、copy ()
find()、find_ first _not_of()、find first_ of()~insert(）、replace()、rfind( 、swap()
```cpp=

#include <iostream>
#include <cstring>
using namespace std;


int main()
{
	string str1 = "123";
	string str2 = "456";
	string str3;
	char cstr[10];
	int pos;

	sprintf_s(cstr, str1.c_str());
	str3 = cstr;

	//取出字元，與str1[2]相同
	cout << "取出索引位置2的字元：" << str1.at(2) << endl;

	//字串相加、附加。
	str3 = str1 + str2;
	str3.append("abc123");
	cout << "str3= " << str3 << endl;

	//取子字串
	cout << "取子字串= " << str3.substr(4, 3) << endl;

	//比較字串
	str2 = "456789";
	cout << "字串比較= " << str3.compare(3, 3, str2.c_str(), 3) << endl;

	//複製字串
	strcpy_s(cstr, "hello");
	str3.copy(cstr, 3, 6);
	cout << "字元陣列字串cstr= " << cstr << endl;

	//移除子字串
	cout << "移除子字串： " << str3.erase(0, 3) << endl;

	//尋找：在"abc123"中尋找2個字元"ab"
	pos = str3.find("abd", 3, 2);
	cout << "尋找的索引位置= " << pos << endl;

	//str3的"56abc"在"465ba"中並沒有c，所以回傳c在str3的索引位置
	str2 = "465ba12c";
	pos = str3.find_first_not_of(str2.c_str(), 1, 5);
	cout << "第一個沒出現的字元：" << str3[pos] << endl;

	//尋找第一個出現的字元
	str2 = "5ba6";  //"6ba5"
	pos = str3.find_first_of(str2.c_str(), 2, 3);
	cout << "第一個出現的字元：" << str3[pos] << endl;

	//插入字串
	cout << "str3= " << str3.insert(0, "hello123", 5) << endl;

	//字串取代
	str2 = "apple";
	str3.replace(0, 3, str2, 1, 3);
	cout << "str3= " << str3 << endl;

	//尋找最後出現的字元
	pos = str3.rfind("lb", 10, 1);
	cout << "尋找最後出現的字元的索引位置: " << pos << endl;

	//字串交換
	str3.swap(str1);
	cout << "字串交換後：";
	cout << "str1= " << str1 << ", str3= " << str3 << endl;

	system("pause");
}


 
