Note C++ string

C++ string的一些操作记录

#include

  • 定义
#include 
#include 

int begin = 0;
int mid = 2;
int len = 3;
int end = 8;
int pos = 0;
  • 构造
string str = "A";
string str1(str);
string str2("A");
string str3("abcd", len);   // str3 == "abc"
string str4("abcd", begin, len); // str4 = "abcd"从begin开始,len长
string str5(len, 'a'); // 长度为len个'a'
  • 常用
    length、size、capacity、empty、resize、reserve
// 2 常用函数
len = str.length(); // 长度
len = str.size();   // 长度
int capacity = str.capacity(); // 容量

str.resize(len);        // str长度大于len截断, 小于\0补齐
str.resize(len, 'a');   // str长度大于len截断, 小于'a'补齐
str.reserve(len);       // 设置容量 不填充

bool isEmpty = str.empty();
  • 增加
    push_back、append、insert
str.push_back('a');
str.append("ABC");

// 下标添加
str.insert(begin, len, 'a'); // str的begin位置增加len和'a'字符
str.insert(begin, "abc"); // begin位置添加
str.insert(begin, "abc", len); // begin位置添加"abc"的len长字符
str.insert(begin, "abc", begin, len); // begin位置添加 "abc"从begin开始,len长

// 迭代器添加
// iterator insert(const const_iterator _Where, _CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch)
str.insert(str.begin(), len, 'a');
// iterator insert(const const_iterator _Where, const _Iter _First, const _Iter _Last)
str.insert(str.begin(), str2.begin(), str2.end());

  • 删除
    erase、clear、assign
str.erase(mid); // 下标mid开始,后边全部删除
str.erase(mid, len);  // 下标mid开始,删除len个
str.clear();

str.assign("abc");  // 清空str,赋值为"abc"
str.assign("abcd", len); // 清空,保留len长字符
str.assign("abccc", begin, len);    // 清空, begin开始,保留len
  • 修改
    swap、replace
str.swap(str1); // 交换str1 str
str.replace(begin, len, "abc"); // 下标begin开始,替换len长度
  • 查找
    find、rfind、find_first_of、find_last_of
    string::size_type、string::npos
//size_t find(const string & str, size_t pos = 0) const;
//size_t find(const char* s, size_t pos, size_t n) const;
//size_t find(const char* s, size_t pos = 0) const;
//size_t find(char c, size_t pos = 0) const;
// pos查找起始位置 n待查找字符串的前n个字符
pos = str.find('a'); // 成功返回位置,失败返回-1
pos = str.find("abc");
pos = str.find('a', begin); // 从begin位置处查找
pos = str.find("abc", begin, len); // 从begin位置处查找 "abc"的前len字符

// 从尾部查, 不是倒着查
pos = str.rfind('a');
pos = str.rfind("abc");
pos = str.rfind('a', begin); // begin位置,向前查
pos = str.rfind("abc", begin, len);

//size_t find_first_of(const string & str, size_t pos = 0) const;
//size_t find_first_of(const char* s, size_t pos, size_t n) const;
//size_t find_first_of(const char* s, size_t pos = 0) const;
//size_t find_first_of(char c, size_t pos = 0) const;
// pos查找起始位置 n待查找字符串的前n个字符
// 查找是否包含有子串中任何一个字符
str.find_first_of("abc");
str.find_first_of("abc", begin);
str.find_first_of("abc", begin, len);

//size_t find_last_of(const string & str, size_t pos = npos) const noexcept;
//size_t find_last_of(const char* s, size_t pos = npos) const;
//size_t find_last_of(const char* s, size_t pos, size_t n) const;
//size_t find_last_of(char c, size_t pos = npos) const noexcept;

// string::size_type
string::size_type pos = str.find(str2);
// string::npos
if (pos == string::npos) { }
    // 删除收尾空格
    if (!s.empty()) {
        s.erase(0,s.find_first_not_of(" "));
        s.erase(s.find_last_not_of(" ") + 1);
    }
  • 子串
    substr
// string substr(size_t pos = 0, size_t len = npos) const;
// pos 所需的子字符串的起始位置。字符串中第一个字符的索引为 0,默认值为0。
// len 复制的字符数目
str2 = str.substr(begin);
str2 = str.substr(begin, len);
  • 反转
    reverse
// algorithm
reverse(str.begin(), str.end());    // 反转
  • 转换大小写
    transform、::toupper、::tolower
string strTrans = "A";
transform(strTrans.begin(), strTrans.end(), strTrans.begin(), ::toupper);
transform(strTrans.begin(), strTrans.end(), strTrans.begin(), ::tolower);
  • 比较
    compare
// compare
// 相等返回0, 否者ASCII判断返回 正负值
//int compare(const basic_string & s) const;
//int compare(const Ch * p) const;
//int compare(size_type pos, size_type n, const basic_string & s) const;
//int compare(size_type pos, size_type n, const basic_string & s, size_type pos2, size_type n2) const;
//int compare(size_type pos, size_type n, const Ch * p, size_type = npos) const;
str.compare("abc");
  • to_string
// 将数字常量转换为字符串
//std::string to_string(int value);
//std::string to_string(long value);
//std::string to_string(long long value);
//std::string to_string(unsigned value);
//std::string to_string(unsigned long value);
//std::string to_string(unsigned long long value);
//std::string to_string(float value);
//std::string to_string(double value);
//std::string to_string(long double value);
str = to_string(1);
  • 其他:
    c_str、data、copy
// c_str()生成一个const char*指针,指向以空字符终止的数组
// const char* string::c_str() const
const char* strChar = str.c_str();

// const char* string::data() const
// data():与c_str()类似,但是返回的数组不以空字符终止
strChar = str.data();

// size_type copy(_Out_writes_(_Count) _Elem* const _Ptr, size_type _Count, const size_type _Off = 0) const
char charAry[20] = { 0 };
str.copy(charAry, len, begin); // begin开始,拷贝len个 字符

 


#include 
#include 
#include 

using namespace std;

class Solution {
public:
    void Test() {
        int begin = 0;
        int mid = 2;
        int len = 3;
        int end = 8;
        int pos = 0;

        // 1 构造
        string str = "A";
        string str1(str);
        string str2("A");
        string str3("abcd", len);   // str3 == "abc"
        string str4("abcd", begin, len); // str4 = "abcd"从begin开始,len长
        string str5(len, 'a'); // 长度为len个'a'

        // 2 常用函数
        len = str.length(); // 长度
        len = str.size();   // 长度
        int capacity = str.capacity(); // 容量

        str.resize(len);        // str长度大于len截断, 小于\0补齐
        str.resize(len, 'a');   // str长度大于len截断, 小于'a'补齐
        str.reserve(len);       // 设置容量 不填充

        bool isEmpty = str.empty();

        // 增
        str.push_back('a');
        str.append("ABC");

        // 下标添加
        str.insert(begin, len, 'a'); // str的begin位置增加len和'a'字符
        str.insert(begin, "abc"); // begin位置添加
        str.insert(begin, "abc", len); // begin位置添加"abc"的len长字符
        str.insert(begin, "abc", begin, len); // begin位置添加 "abc"从begin开始,len长

        // 迭代器添加
        // iterator insert(const const_iterator _Where, _CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch)
        str.insert(str.begin(), len, 'a');
        // iterator insert(const const_iterator _Where, const _Iter _First, const _Iter _Last)
        str.insert(str.begin(), str2.begin(), str2.end());


        // 删
        str.erase(mid); // 下标mid开始,后边全部删除
        str.erase(mid, len);  // 下标mid开始,删除len个
        str.clear();

        str.assign("abc");  // 清空str,赋值为"abc"
        str.assign("abcd", len); // 清空,保留len长字符
        str.assign("abccc", begin, len);    // 清空, begin开始,保留len

        // 改
        str.swap(str1); // 交换str1 str
        str.replace(begin, len, "abc"); // 下标begin开始,替换len长度

        // 查
        //size_t find(const string & str, size_t pos = 0) const;
        //size_t find(const char* s, size_t pos, size_t n) const;
        //size_t find(const char* s, size_t pos = 0) const;
        //size_t find(char c, size_t pos = 0) const;
        // pos查找起始位置 n待查找字符串的前n个字符
        pos = str.find('a'); // 成功返回位置,失败返回-1
        pos = str.find("abc");
        pos = str.find('a', begin); // 从begin位置处查找
        pos = str.find("abc", begin, len); // 从begin位置处查找 "abc"的前len字符

        // 从尾部查, 不是倒着查
        pos = str.rfind('a');
        pos = str.rfind("abc");
        pos = str.rfind('a', begin); // begin位置,向前查
        pos = str.rfind("abc", begin, len);

        //size_t find_first_of(const string & str, size_t pos = 0) const;
        //size_t find_first_of(const char* s, size_t pos, size_t n) const;
        //size_t find_first_of(const char* s, size_t pos = 0) const;
        //size_t find_first_of(char c, size_t pos = 0) const;
        // pos查找起始位置 n待查找字符串的前n个字符
        // 查找是否包含有子串中任何一个字符
        str.find_first_of("abc");
        str.find_first_of("abc", begin);
        str.find_first_of("abc", begin, len);

        //size_t find_last_of(const string & str, size_t pos = npos) const noexcept;
        //size_t find_last_of(const char* s, size_t pos = npos) const;
        //size_t find_last_of(const char* s, size_t pos, size_t n) const;
        //size_t find_last_of(char c, size_t pos = npos) const noexcept;

        // string::size_type
        string::size_type pos = str.find(str2);
        // string::npos
        if (pos == string::npos) { }


        // 子串
        // string substr(size_t pos = 0, size_t len = npos) const;
        // pos 所需的子字符串的起始位置。字符串中第一个字符的索引为 0,默认值为0。
        // len 复制的字符数目
        str2 = str.substr(begin);
        str2 = str.substr(begin, len);

        // algorithm
        reverse(str.begin(), str.end());    // 反转

        // 转换大小写
        string strTrans = "A";
        transform(strTrans.begin(), strTrans.end(), strTrans.begin(), ::toupper);
        transform(strTrans.begin(), strTrans.end(), strTrans.begin(), ::tolower);

        // 其他
        // c_str()生成一个const char*指针,指向以空字符终止的数组
        // const char* string::c_str() const
        const char* strChar = str.c_str();

        // const char* string::data() const
        // data():与c_str()类似,但是返回的数组不以空字符终止
        strChar = str.data();

        // size_type copy(_Out_writes_(_Count) _Elem* const _Ptr, size_type _Count, const size_type _Off = 0) const
        char charAry[20] = { 0 };
        str.copy(charAry, len, begin); // begin开始,拷贝len个 字符

        // compare
        // 相等返回0, 否者ASCII判断返回 正负值
        //int compare(const basic_string & s) const;
        //int compare(const Ch * p) const;
        //int compare(size_type pos, size_type n, const basic_string & s) const;
        //int compare(size_type pos, size_type n, const basic_string & s, size_type pos2, size_type n2) const;
        //int compare(size_type pos, size_type n, const Ch * p, size_type = npos) const;
        str.compare("abc");

        // to_string
        // 将数字常量转换为字符串
        //std::string to_string(int value);
        //std::string to_string(long value);
        //std::string to_string(long long value);
        //std::string to_string(unsigned value);
        //std::string to_string(unsigned long value);
        //std::string to_string(unsigned long long value);
        //std::string to_string(float value);
        //std::string to_string(double value);
        //std::string to_string(long double value);
        str = to_string(1);

    }
};

 

你可能感兴趣的:(c++)