[C++学习笔记09]string
- string的定义原型
typedef basic_string<char, char_traits<char>, allocator<char> > string; typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring; // 第二三个参数有默认值
- string部分构造方式
// string 部分构造方式 #include <iostream> #include <string> using namespace std; int main(void) { string s1; string s2("ABCDEFG"); cout << s1 << endl; cout << s2 << endl; // 使用最初的形式定义 basic_string<char> s3("xxxx"); cout << s3 << endl; /* basic_string( const value_type *_Ptr, size_type _Count ); */ string s4("DEFG", 2); cout << s4 << endl; // DE /* basic_string( const basic_string& _Right, size_type _Roff, size_type _Count = npos ); */ string s5(s2, 2, 2); cout << s5 << endl; //CD /* basic_string( const_iterator _First, const_iterator _Last ); */ string::const_iterator first = s2.begin() + 1; string::const_iterator end = s2.begin() + 3; // [first, end) string s6(first, end); cout << s6 << endl; // BC return 0;
}
- string常用成员函数
// string 部分成员函数部分形式操作 #include <iostream> #include <string> using namespace std; int main(void) { string s1("ABCDEC"); cout << s1.size() << endl; cout << s1.length() << endl; cout << s1.empty() << endl; // 一样第二个参数是count,不是截至位置 string s2 = s1.substr(1, /*4*/string::npos); // string::npos == 4294967295 cout << s2 << endl; //find /* size_type find( value_type _Ch, size_type _Off = 0 ) const; */ // 查找某个字符在string中第一次出现的位置(下标),没找到返回 4294967295 最大值 cout << s1.find('C') << endl; // 2 //size_type -> size_t ->unsigned int /* size_type find( const value_type* _Ptr, size_type _Off = 0 ) const; */ // 在string中查找字符串,找到返回第一次出现位置的下标,没找到返回 string::npos, 4294967295 最大值 cout << s1.find("CD") << endl; // 2 /* size_type find( const basic_string<CharType, Traits, Allocator>& _Str, size_type _Off = 0 ) const; */ // 在string中查找string cout << s1.find(s2) << endl; //rfind,反向查找,返回第一次查找到的下标 cout << s1.rfind('C') << endl; // 5 //replace /* basic_string<CharType, Traits, Allocator>& replace( size_type _Pos1, size_type _Num1, const value_type* _Ptr ); */ // 第三个参数也能是string,这里不写了,只介绍这一个好了 string s3 = s1; s3.replace(1, 2, "RRR"); cout << s3 << endl; // ARRRDEC // compare cout << s3.compare(s1) << endl; // 1, s3 > s1 // insert /* basic_string<CharType, Traits, Allocator>& insert( size_type _P0, const value_type* _Ptr ); */ s3.insert(2, "aaaaaaaaaaa"); cout << s3 << endl; // ARaaaaaaaaaaaRRDEC // append /* basic_string<CharType, Traits, Allocator>& append( const value_type* _Ptr ); */ s3.append("OOOOOOOOOOOOOOOOO"); cout << s3 << endl; // ARaaaaaaaaaaaRRDECOOOOOOOOOOOOOOOOO // swap /* void swap( basic_string<CharType, Traits, Allocator>& _Str ); */ s3.swap(s2); cout << s3 << endl; cout << s2 << endl; return 0; }
- string综合应用
在字符集中查找存在的首尾字符,并截取。
#include <iostream> #include <string> using namespace std; int main() { string strinfo = " //*---------Hello World!--------------*//"; string strset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; /* size_type find_first_of( const basic_string<CharType, Traits, Allocator>& _Str, size_type _Off = 0 ) const; */ string::size_type first = strinfo.find_first_of(strset); if (first == string::npos) cout << "not found." << endl; string::size_type end = strinfo.find_last_of(strset); if (end == string::npos) cout << "not found." << endl; //cout << "string::npos" << string::npos << endl; // string::npos == 4294967295 cout << strinfo.substr(first, end - first + 1) << endl; return 0; }
- string简单去除字符串左右空格
// string 简单实现去除字符串左右空格 #include <iostream> #include <string> using namespace std; class StringUtils { public: static void LTrim(string &s) { string drop = " \t"; s.erase(0, s.find_first_not_of(drop)); } static void RTrim(string &s) { string drop = " \t"; s.erase(s.find_last_not_of(drop)+1); } static void Trim(string &s) { LTrim(s); RTrim(s); } }; int main(void) { string s1 = " ABCD "; StringUtils::Trim(s1); cout << s1 << endl; // "ABCD" cout << s1.size() << endl; // 4 return 0; }