C++ - 字符串

C++ 学习笔记

C++ String

char

  • 8 bits

string

  • char 的数组
  • 字符串有一个结尾的 char(零值 )
  • char* name = "qinhan";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>

// 程序的主函数
int main(s)
{
char* name = "test";
char name2[4] = {'t','e','s','t'};
char name3[5] = {'t','e','s','t','\0'};

std::cout << name << std::endl;
std::cout << name2 << std::endl;
std::cout << name3 << std::endl;

return 0;
}
  • 运行结果
    result

string 包

  • 需要 #include <string>
  • 实际上它是一个类,有各种各样的方法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <iostream>
    #include <string>

    // 程序的主函数
    int main( )
    {
    std::string name = "test"; // name 是一个 const char array
    std::cout << name << std::endl;
    std::cout << name.size() << std::endl;

    // error, 因为 std::string 是一个 const char array
    // std::string name1 = "test" + "test";
    std::string name1 = "test";
    name1 += "test"; // string append
    bool contains = name1.find("no") != std::string::npos;

    return 0;
    }

    // 当string作为 只读参数 的时候,需要以 `const reference` 的形式,否则会进行拷贝
    // 如果 需要对参数进行修改并且需要影响原值的话,去掉 const
    void PrintStr(const std::string& str)
    {
    std::cout << str << std::endl;
    }

string literals

  • 存储于只读内存中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>

// 程序的主函数
int main( )
{
using namespace std::string_literals;
std::string name0 = "jack"s + "tom"; // "jack"s 经过函数运算返回 std::string, 这儿的 s 是运算符重载
std::wstring name00 = L"jack"s + L"tom";
std::u32string name000 = U"jack"s + U"tom";

const char* name = u8"jack"; // 1 byte char
const wchar_t* name2 = L"jack"; // white char, 2 byte char on win, 4 byte on linux
const char16_t* name3 = u"jack"; // 2 byte char
const char32_t* name4 = U"jack"; // 4 byte char

// 可以换行
const char* name5 = R"(Line1
Line2
Line3
Line4)";

std::cin.get();
return 0;
}