#pragma once
#include<Windows.h>
#include<string>
#include<iostream>
#include<tchar.h>
using namespace std;
/*
备注:
1、所有和string::npos的比较一定要用string::size_type来使用,不要直接使用int 或者unsigned int等类型。其实string::npos表示的是-1
2、const char* 可以和string 直接转换:
1) c_str直接返回一个以\0结尾的字符串
2) data直接以数组方式返回string的内容,其大小为size()的返回值,结尾并没有\0字符
3) copy把string的内容拷贝到buf空间中
4) 只在需要时才使用c_str()或者data()得到字符串,每调用一次,下次再使用就会失效
3、我们可以直接的根据我们的实际需要来使用 string和wstring,而不用直接去使用basic_string,除非我们想要使用的string的类型不是char或wchar而是什么其他的类型。
1)wstring是宽char,Unicode编码,一般情况下一个字符占两个字节大小
2)string是窄char,AscII编码,一个字符占一个字节大小
*/
string str;
public:
CustomString(const string& s);
CustomString();
~CustomString();
// 加
string& append(const string&str);
string& append(const string&str, size_t subpos, size_t subLen);
string& insert(string::size_type pos, const string& str);
string& insert(string::size_type pos, const string& str, string::size_type subpos, string::size_type sublen);
void push_back(TCHAR c);
// 删除
void clear();
string& erase(string::size_type pos, string::size_type len);
string::iterator erase(string::iterator p);
string::iterator erase(string::iterator first, string::iterator last);
void pop_back();
// 更新
void swap(string& str);
string& replace(string::size_type pos, string::size_type len, const string& str);
string& replace(string::iterator i1, string::iterator i2, const string& str);
void replace(string::size_type pos, string::size_type len, const string& strdst, string::size_type subpos, string::size_type sublen);
// 查找
char& at(size_t pos);
const char& at(size_t pos) const;
string::iterator rbegin();
const string::iterator rbegin() const;
char& back();
const char& back() const;
string::iterator begin();
string::iterator begin() const;
string::iterator end();
string::iterator end() const;
string::iterator rend();
string::iterator rend() const;
string::size_type find(const string& str, string::size_type pos = 0) const;
string::size_type find_first_of(const string& str, string::size_type pos = 0) const;
string::size_type find_last_not_of(const string& str, string::size_type pos = string::npos) const;
string::size_type find_first_not_of(const string& str, string::size_type pos = 0) const;
string& assign(const string& str);
int compare(const string& str) const;
int compare(size_t pos, size_t len, const string& str) const;
int compare(size_t pos, size_t len, const string& str, size_t subpos, size_t sublen) const;
// 子串
string substr(string::size_type pos, string::size_type len) const;
// 基本操作
size_t capacity() const;
bool empty() const;
string::size_type length() const;
string::size_type max_size() const;
void reserve(string::size_type n = 0);
void resize(string::size_type n);
void shrink_to_fit();
string::size_type size() const;
// 操作符
string& operator+= (const string& str);
string& operator= (const string& str);
TCHAR operator[] (string::size_type pos);
TCHAR operator[] (string::size_type pos) const;
};
#include<Windows.h>
#include<string>
#include<iostream>
#include<tchar.h>
using namespace std;
/*
备注:
1、所有和string::npos的比较一定要用string::size_type来使用,不要直接使用int 或者unsigned int等类型。其实string::npos表示的是-1
2、const char* 可以和string 直接转换:
1) c_str直接返回一个以\0结尾的字符串
2) data直接以数组方式返回string的内容,其大小为size()的返回值,结尾并没有\0字符
3) copy把string的内容拷贝到buf空间中
4) 只在需要时才使用c_str()或者data()得到字符串,每调用一次,下次再使用就会失效
3、我们可以直接的根据我们的实际需要来使用 string和wstring,而不用直接去使用basic_string,除非我们想要使用的string的类型不是char或wchar而是什么其他的类型。
1)wstring是宽char,Unicode编码,一般情况下一个字符占两个字节大小
2)string是窄char,AscII编码,一个字符占一个字节大小
*/
// string学习官网:http://www.cplusplus.com/reference/string/string/append/
class CustomString {
public:string str;
public:
CustomString(const string& s);
CustomString();
~CustomString();
// 加
string& append(const string&str);
string& append(const string&str, size_t subpos, size_t subLen);
string& insert(string::size_type pos, const string& str);
string& insert(string::size_type pos, const string& str, string::size_type subpos, string::size_type sublen);
void push_back(TCHAR c);
// 删除
void clear();
string& erase(string::size_type pos, string::size_type len);
string::iterator erase(string::iterator p);
string::iterator erase(string::iterator first, string::iterator last);
void pop_back();
// 更新
void swap(string& str);
string& replace(string::size_type pos, string::size_type len, const string& str);
string& replace(string::iterator i1, string::iterator i2, const string& str);
void replace(string::size_type pos, string::size_type len, const string& strdst, string::size_type subpos, string::size_type sublen);
// 查找
char& at(size_t pos);
const char& at(size_t pos) const;
string::iterator rbegin();
const string::iterator rbegin() const;
char& back();
const char& back() const;
string::iterator begin();
string::iterator begin() const;
string::iterator end();
string::iterator end() const;
string::iterator rend();
string::iterator rend() const;
string::size_type find(const string& str, string::size_type pos = 0) const;
string::size_type find_first_of(const string& str, string::size_type pos = 0) const;
string::size_type find_last_not_of(const string& str, string::size_type pos = string::npos) const;
string::size_type find_first_not_of(const string& str, string::size_type pos = 0) const;
string::size_type rfind(const string& str, string::size_type pos = string::npos) const;
// 赋值string& assign(const string& str);
string& assign(const string&str, size_t subpos, size_t sublen);
// 比较int compare(const string& str) const;
int compare(size_t pos, size_t len, const string& str) const;
int compare(size_t pos, size_t len, const string& str, size_t subpos, size_t sublen) const;
// 子串
string substr(string::size_type pos, string::size_type len) const;
// 基本操作
size_t capacity() const;
bool empty() const;
string::size_type length() const;
string::size_type max_size() const;
void reserve(string::size_type n = 0);
void resize(string::size_type n);
void shrink_to_fit();
string::size_type size() const;
// 操作符
string& operator+= (const string& str);
string& operator= (const string& str);
TCHAR operator[] (string::size_type pos);
TCHAR operator[] (string::size_type pos) const;
};