學會了string類,自己就不用建字串類了
string類
1、string類是模板類:
typedef basic_string<
char
> string;
使用string類要包含標頭檔案
2、string物件的初始化
string s1
("hello");
string s2(8
,'xs');
string s3 =
"world"
;
錯誤的方式:
string error1 =
'hello'
;// 錯誤是因為這種形式賦字串
string error2
('world');
string error3(8
);string error4 =
22;
可以將字元賦值給string物件
string s;
s ='a'
;
3、string類的成員函式
(1)、string類物件長度用成員函式length()可讀取
(2)、string類物件支援資料流運算子
string str
("hello world");
cout>str;
(3)、string物件支援getline函式
string s
getline
(cin,s)
;
4、string的賦值與連線
(1)、用=賦值
string s1,s2;
s1 = s2;
=運算子已經被過載
(2)、用assign成員函式複製
string s1
("hello"
),s2;
s2.assign
(s1)
;
(3)、用assign成員函式部分複製
string s1
("hello world"
),s3;
s3.assign
(s1,1,
3)//在s1的下標為1的字元開始複製3個字元給s3
注:複製語句兩個數字一組,第乙個代表位置,第二個代表複製多少
(4)、單個字元複製
s2[1]
= s1[3]
='a'
;
(5)、逐個訪問string物件中的字元
string s1
("hello");
for(i =
0, i < s1.length,i++
)
at成員函式會做範圍檢查,若超出範圍,會給出out_of_range異常,而[ ]不會做範圍檢查
(6)、用+運算子連線字串
string s1
("hello "),
s2("world");
s1 +
= s2;
cout<("world"),
s2("hello ");
s1.(s2)
;cout
1,s2.
size()
); s1的字元數,size與length相同
// 從s2下標為1開始複製size個字元,若字串沒有這麼多字元,則複製到字串最後乙個字元
5、string類的比較
用==,>=,<=,>,<,!=
返回的是bool型別,成立返回true,否則返回false
也可用成員函式compare比較string
string s1
("hello"),
s2("s")
s1.compare
(s2)
;// 相同返回0,大於返回1,小於返回-1.
6、子串:用成員函式substr生成子串
string s1
("hello world"
),s2;
s2 = s1.
substr(4
,5)// 在s1的下標為4的位置複製5個字元 我搞不懂這個和複製有啥區別。。。
7、交換string:使用swap成員函式
string s1
("hello"),
s2("world");
s1.swap
(s2)
;
8、查詢string中的字元
1、從頭往後找:find()
string s1
("asd");
s1.find
("as"
);
在s1中從前往後查詢"as"出現的第一次位置。如果找到,返回"a"位置,若沒找到,返回string::npos(string中定義的靜態常量)
2、從後往前找:rfind()
string s1
("asd");
s1.rfind
("as");
s1.rfind
("as",2
)從下標為2的開始找
s1從後往前查詢,"as"第一次出現的位置,找到,返回"a"的下標,若找不到,返回string::npos
3、查詢乙個字串的任意乙個字元:find_first_of
string s1
("aaaa");
s1.first_find_of
("abcd"
);
在s1中查詢"abcd"字串的任意乙個字元出現的位置,若有就返回這個字元第一次出現的位置。
4、查詢乙個字串的任意乙個字元:find_last_of
string s1
("aaaa");
s1.first_last_of
("abcd"
);
和上面類似,只不過是返回這個字元最後一次出現的位置。
注:若是有多個,就按被查字串的字元順序。
5、查詢不在字串內的字母的位置:find_first_not_of()
從前往後查詢,給出的字串中不在(「abcd」)中的字元,返回第一次出現的位置。
6、查詢不在字串內的字母的位置:find_last_not_of()
從後往前查詢,給出的字串中不在(「abcd」)中的字元,返回第一次出現的位置。
7、刪除string類中的字元:erase();
string s2
("hello world");
s2.erase(5
);// 去掉下標5及以後的字元
8、替換string類中的字元:replace();
string s1
("hello world");
s1.replace(2
,3,"hello");
// 將s1中下標2開始3個字元換成了"hello"
注:這個函式可以改變string物件的大小
9、string中插入字元:insert();
string s1
("hello"),
s2("world");
s1.insert(2
,s2)
;// 將s2插入到s1的下標為2的位置
s1.insert(2
,s2,3,
4)// 將s2的下標為3開始的4個字元插入到,s1的下標2的位置
10、轉換成c語言式char *字串:c_str
11、字串拷貝:copy()
s1.
copy
(s2,0,
5);s2[5]
=0;
從s1的下標0的位置開始製作乙個長度為5的字串,並把它賦給s2,返回值表明實際複製字串的長度。
12、字串流處理
除了標準輸入輸出流和檔案輸入輸出流外,還可以進行string流輸入輸出。
使用istringstream,ostringstream進行字串的輸入輸出,也稱記憶體輸入輸出。
標頭檔案為
ostringstream outputstring
(output)
int a =10;
outputstring<<
"this"
C 學習之string類
string類 string初始化 示例 include includeusing namespace std int main string s1 hello world 把字串賦給當前字串s1 cout string字元操作 示例 include includeusing namespace s...
c 筆記(八) 類
類,物件,類成員 字段 方法 用類建立乙個物件,用new運算子,類裡面用來描述特徵的變數稱為這個類的字段 car car new car 使用物件呼叫欄位時,用點運算子得到欄位並賦值,如果在類外部使用欄位時,字段一定用public修飾 red 100.5 bmw 用點運算子點出來的成員,前面如果是 ...
C 學習筆記八
24 子物件 當乙個類的成員時另乙個類的物件時,該物件就為子物件。子物件即是物件的成員 當類中出現了子物件 物件成員 該類的建構函式要包含對子物件的初始化,通常採用成員初始化列表的方法來初始化子物件 include class a void print class b 成員初始化列表,私有成員可以通...