1. string的定义原型


typedef basic_string<char, char_traits<char>, allocator<char> >    string; 
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >
wstring;

// 第二三个参数有默认值

  1. 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;


}



  1.  
  2. 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;
}

  1. 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;
}



  1.  
  2. 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;
}



  1.