感謝
Mr. Opengate. http://mropengate.blogspot.com/2015/07/cc-string-stl.html
BYvoid 和 Nicolai M.Josuttis https://www.byvoid.com/zht/blog/cpp-string
bcr https://stackoverflow.com/q/5590381
string 介紹
string是保存字符的序列容器,簡單來說就是存文字用的,使用前須使用#include <string>
string用法
賦值 = :將字串指定給另一個字串。
比較 ==:比較兩個字串是否相等。
串接 +:串接兩字串
.erase(first,num) :清空字串從first開始的num個字符。
.substr(first,num) :取得從first開始的num個字符。
.clean() :清空整的字串。
.length() :取得字串的長度。
.size() :取得字串的長度。
.assign(string2,first,length) :將string2中從first開始的length個字指定給此string。
.append(string2,first,length) :將string2中從first開始的length個字接到此string後面。
.find("example",place) :從place的位置開始尋找第1個example。
.find_first_of(string2) :在此字串中,從第一個字符開始,尋找string2中的任何字符。
.find_first_not_of(string2) :在此字串中,從第一個字符開始,尋找不包括string2中的任何字符。
.find_last_of(string2) :在此字串中,從最後一個字符開始,尋找string2中的任何字符。
.find_last_not_of(string2) :在此字串中,從最後一個字符開始,尋找不包括string2中的任何字符。
#include <iostream> #include <string> using namespace std; int main () { string str1,str2,str3,str4; cout<<"輸入一個字串 , "; cin>>str1; //1.輸出str1 cout<<"1.str1 = "<<str1<<endl; //2.清空字串指定位置 str1.erase(0,1); cout<<"2.str1 = "<<str1<<endl; //3.字串賦值 str2=str1; cout<<"3.str2 = "<<str2<<endl; //4.string的串接 str1=str1+" behind"; cout<<"4.str1 = "<<str1<<endl; //5.string串接 str1="front "+str1; cout<<"5.str1 = "<<str1<<endl; //6.兩個取得string的長度 cout<<"6.str1的長度 = "<<str1.length()<<endl; cout<<"6.str1的長度 = "<<str1.size()<<endl; //7.存取str1的字 cout<<"7.str1第一個字 = "<<str1.at(0)<<endl; cout<<"7.str1第二個字 = "<<str1[1]<<endl;
輸出結果
輸入一個字串 , ihello
1.str1 = ihello
2.str1 = hello
3.str2 = hello
4.str1 = hello behind
5.str1 = front hello behind
6.str1的長度 = 18
6.str1的長度 = 18
7.str1第一個字 = f
7.str1第二個字 = r
//8.清空str3 str3.clear(); cout<<"8.str3 = "<<str3<<endl; //9.兩字串的串接 str3=str3+str1; //比較兩字串 if(str3==str1) { cout<<"9.str1 = str3 = "<<str2<<endl; } //10.指定字串 str4.assign(str1,6,5); cout<<"10.str1 = "<<str1<<endl; cout<<"10.str4 = "<<str4<<endl; //11.指定字串加到另一字串 str4.append(str1,6,5); cout<<"11.str4 = "<<str4<<endl; //12.插入字串 str4.insert(5," add "); cout<<"12.將add加入str4 = "<<str4<<endl; str4.insert(5,str2); cout<<"12.將str2加入str4 = "<<str4<<endl; //13.尋找字串 cout<<"13.在str4尋找add在第幾個位置 = "<<str4.find("add",0)<<endl; //14.尋找不到字串 cout<<"14.str3 = "<<str3<<endl; cout<<"14.在str3尋找add在第幾個位置 = "<<str3.find("add",0)<<endl; //15.我真的不知道 string::npos是甚麼 求大大指點 cout<<"15.string::npos = "<<string::npos<<endl; return 0; }
輸出結果
8.str3 =
9.str1 = str3 = hello
10.str1 = front hello behind
10.str4 = hello
11.str4 = hellohello
12.將add加入str4 = hello add hello
12.將str2加入str4 = hellohello add hello
13.在str4尋找add在第幾個位置 = 11
14.str3 = front hello behind
14.在str3尋找add在第幾個位置 = 18446744073709551615
15.string::npos = 18446744073709551615
int 轉 string
使用前,前面請加上#include <sstream>
#include <iostream> #include <string> #include <sstream> using namespace std; int main () { int a; cout<<"輸入一int,"; cin>>a; stringstream ss; ss << a; string str = ss.str(); cout<<"str = "<<str; return 0; }
輸出結果
輸入一int,1511
str = 1511
string應用
過濾一行開頭和結尾的所有非英文字符
#include <string> #include <iostream> using namespace std; int main() { string str1="///...**/work smart--/*/-**+///"; string strset="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; int first = str1.find_first_of(strset);//first為找到的位置 資料型態是int string::size_type stf=str1.find_first_of(strset);//功能與first相同但資料型態不同 if(stf==string::npos ) { cout<<"not find any characters"<<endl; return -1; } string::size_type stl= str1.find_last_of(strset); if(stl==string::npos ) { cout<<"not find any characters"<<endl; return -1; } //得到字串的指定位置 cout<<"str1 = "<<str1.substr(stf,stl-stf+1)<<endl;
輸出結果
str1 = work smart
//試用 find_first_not_of find_last_not_of string str2="work /*-*/ smart"; string::size_type stf2=str2.find_first_not_of(strset); if(stf2==string::npos ) { cout<<"not find any characters"<<endl; return -1; } string::size_type stl2= str2.find_last_not_of(strset); if(stl==string::npos ) { cout<<"not find any characters"<<endl; return -1; } //清空字串指定位置 cout<<"str2 = "<<str2.erase(stf2,stl2-stf2)<<endl; return 0; }
輸出結果
str2 = work smart
心得
經過這幾天的解題,我發現string很常使用,幾乎都是int和string就可以了。
所以,我想先把string研究一下。所以把一些用法都用過一次,在此分享給大家,希望可以幫助到其他人。
如果有錯誤請馬上告知。
感謝在網路上分享經驗的大大。