string
当使用加号运算符时,加号两边至少得有一个是 string 类型
1 2 3 4 5 6 7 8 9 10 11 12
| string s1 = "hello", s2 = "world"; string s3 = s1 + ", " + s2 + ’\n’;
string s4 = s1 + ", "; string s5 = "hello" + ", ";
string s6 = s1 + ", " + "world";
string s6 = (s1 + ", ") + "world";
string s7 = "hello" + ", " + s2; string s7 = "hello" + (", " + s2);
|
"xxx"
实际上是 char*
类型,string
类定义了一种 char *
到
string
的转换功能,这使得可以使用 C-风格字符串来初始化
string 对象,可以用 c_str()
函数返回 C-风格字符串
1 2 3 4
| string s = "qwt"; char *str = s;
const char *str = s.c_str();
|
几个常用成员函数
1 2 3 4
| string s = "qwt"; cout << s.size() << endl; cout << s.length() << endl; cout << s.empty() << endl;
|
输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| char qwt[75]; cin >> qwt; cin.getline(qwt, 7); cin.get(qwt, 5);
string qwt; cin >> qwt; getline(cin, qwt); getline(cin, str, '$');
string qwt; qwt.resize(10); scanf("%s", &qwt[0]); printf("%s\n", qwt.c_str());
|
访问元素
使用下标
1 2 3
| string qwt = "75t"; for (int i = 0; i < qwt.length(); i++) cout << qwt[i] << endl;
|
基于范围循环,range-based loop
1 2
| for (auto ch: qwt) cout << ch << endl;
|
使用 迭代器
1 2
| for (auto it = qwt.begin(); it != qwt.end(); ++it) cout << *it << endl;
|
修改元素
1 2 3 4 5 6 7 8
| for (auto &ch : qwt) ch = toupper(ch);
for (int i = 0; i < qwt.length(); i++) qwt[i] = toupper(qwt[i]);
|
构造函数
NBTS 表示空字符串结尾的传统 C 字符串
string(const char * s) |
将 string 对象初始化为 s 指向的 NBTS |
string(size_type n, char c) |
创建一个包含 n 个元素的 string 对象,其中每个元素都被初始化为字符
c |
string(const string & str) |
将一个 string 对象初始化为string对象str (复制构造函数) |
string() |
创建一个默认的 string 对象,长度为 0 (默认构造函数) |
string(const char * s, size_type n) |
将 string 对象初始化为 s 指向的 NBTS 的前 n 个字符,即使超过了 NBTS
结尾 |
template <class Iter > string(lter begin, Iter end) |
将 string 对象初始化为区间内的字符,其中 begin 和 end
的行为就像指针,用于指定位置,范围包括 begin 在内,但不包括 end |
string(const string & str, string size type pos = 0, size_type n = npos) |
将一个 string 对象初始化为对象 str 中从位置 pos 开始到结尾的字符,
或从位置 pos 开始的 n 个字符 |
string(string && str) noexcept |
这是 C++11 新增的,它将一个 string 对象初始化为 string 对象
str,并可能修改 str(移动构造函数) |
string(initializer_list <char> il) |
这是 C+11 新增的,它将一个 string 对象初始化为初始化列表 il
中的字符 |
cctype 库
isalnum(c) |
true if c is a letter or a digit. |
isalpha(c) |
true if c is a letter. |
iscntrl(c) |
true if c is a control character. |
isdigit(c) |
true if c is a digit. |
isgraph(c) |
true if c is not a space but is printable. |
islower(c) |
true if c is a lowercase letter. |
isprint(c) |
true if c is a printable character (i.e., a space or a character
that has a visible representation). |
ispunct(c) |
true if c is a punctuation character (i.e., a character that is not
a control character, a digit, a letter, or a printable whitespace). |
isspace(c) |
true if c is whitespace (i.e., a space, tab, vertical tab, return,
newline, or formfeed). |
isupper(c) |
true if c is an uppercase letter. |
isxdigit(c) |
true if c is a hexadecimal digit. |
tolower(c) |
If c is an uppercase letter, returns its lowercase equivalent;
otherwise returns c unchanged. |
toupper(c) |
If c is a lowercase letter, returns its uppercase equivalent;
otherwise returns c unchanged. |