一.string對象的定義和初始化
1.string標准庫支持4種構造函數
string s1; //默認構造函數,s1為空串
string s1(s2); //將s2初始化為s1的副本
string s3("value"); //將s3初始化為一個字符串字面值副本
string s4(n, 'c'); //將s4初始化為字符'c'的n個副本
其他構造方式:
string( str, n ) //被初始化為str所指向的數組的前n個元素的副本
string( str+pos, n) //從str+pos開始n個元素的副本
string( s2, pos) //被初始化為s2(string對象)從下標為pos處開始的字符串副本
string( s2, pos, len)
2.string對象的讀寫
A.讀取並忽略開頭所有的空白字符(如空格,換行符,制表符)
讀取字符直至再次遇到空白字符時,讀取終止;(對單詞的讀取)
int main() { string s1; while( cin >> s1 ) cout << s1 << endl; return 0; }
B.用getline()讀取整行文本,getline()並不忽略行開頭的換行符,只要讀取到換行符,果斷停止讀入。
line不包含換行符,如果需要逐行輸出必須自己添加換行符。(getline()讀取的string對象中不存儲換行符)
int main() { string line; while( getline(cin, line)) cout << line << endl; return 0; }
二.string對象的操作
1.簡單操作羅列
s.empty() // 如果s為空串,返回true,否則返回false
s.size() // 返回s 中字符的個數
s[n] // 返回s中位置為n的字符,位置從0開始計數
s1 + s2 // 把s1,s2鏈接成一個新字符串,返回新生成的字符串
s1 = s2 // 把s1內容替換為s2的副本
v1 == v2 // 比較v1和v2的內容,返回true,false
> , <, !=, <= 和 >=
2.常用重點操作
A.插入
s.insert(pos, s2) //在下標pos之前 插入 s2的副本
s.insert(pos, s2, pos2, len) //在下標pos之前 插入 s2從pos2下標開始len長度的字符串副本
B.完全替換s
s.assign(s2) //用s2的副本 替換s
s.assign(s2, pos2, len) //用s2中從pos2開始len長度的字符串 替換s
C.刪除
s.erase(pos, len) // 刪 除從下標pos開始len長度個字符
D.返回子串(返回string的對象)
s.substr(pos, n) // 返回從下標pos開始len長度的子串
s.substr(pos) // 從s[pos]開始到結尾
E.append和replace
s.append(str); //將str添加在s之后
s.replace(pos, len, str); // 將s的pos下標開始len長度的字符串由str替換 s.replace(1, 5, str) = s.erase(1, 5) + s.insert(1, str)
F.string類型的查找操作
string類型查找操作全部都返回string::size_type類型的值,以下標形式查找匹配所發生的位置;或者返回一個名為string::npos的特殊值,表示沒有匹配。
s.find(str) //查找子串str
s.find(str, pos) // 從下標pos開始查找
s.rfind(str) //反向查找,從后往前找
string s("asdfasdfwqe"); string::size_type pos1 = s.find("s"); //pos1的值為1 pos1 = s.rfind("s"); // pos1的值為5 pos1 = s.find("w"); // pos1的值變為npos
3.注意事項
B.用string::size_type類型來接收s.size()的返回值(unsigned),它為的是確保庫類型使用的機器無關性,不要把size()的返回值賦給一個int;
C.關系操作符比較時空字符小於任何字符;
D.string對象和字符串字面值的鏈接:每個+操作符的左右操作數必須至少有一個是string類型的
E.從string對象獲取字符
string對象的下表從0開始,到 string[s.size()-1]終止;
string str("some string"); for( string::size_type ix = 0; ix != str.size(); ix++) { cout << str[ix] << endl; }
三.string與數值的相互轉換
View Code #include<iostream> #include<string> #include<sstream> #include<cstdio> using namespace std; //c++ 方法 把數轉換為string string converToString(double x) { ostringstream o; if( o << x) { // str()沒有'\0' c_str有 return o.str(); } return "error"; } double converFromString(const string &s) { istringstream i(s); double x; if( i >> x) { return x; } //if error return 0.0; } int main() { char b[100]; string s1; //c語言方法 sprintf(b,"%d",1987); s1 = b; cout << s1 << endl; string s2 = converToString(1954); cout << s2 << endl; string s3 = "202"; int c = converFromString(s3); cout << c << endl; string s4 = "casacsa6"; int d = converFromString(s4); cout << d << endl; string s5 = "21abf4"; int f = converFromString(s5); cout << f << endl; return 0; }