C++ string
类的常用函数及相关工具的详细总结,按功能分类整理,附代码示例:
函数 | 功能描述 | 示例代码 |
---|---|---|
s.length() | 返回字符串长度(字符数) | string s = "hello"; cout << s.length(); // 输出 5 |
s.empty() | 判断字符串是否为空(等价于 s.length() == 0) | if (s.empty()) { ... } |
s.clear() | 清空字符串内容 | s.clear(); // s 变为 "" |
s.resize(n, c) | 调整字符串长度为 n,新增字符用 c 填充(默认补 '\0') | s.resize(10, 'x'); // "hello" → "helloxxxxx" |
函数 | 功能描述 | 示例代码 |
---|---|---|
s += t | 字符串拼接(追加 t 到 s 末尾) | s += "world"; // "hello" → "helloworld" |
s.append(t) | 同 +=,支持追加子串(如 s.append(t, pos, len)) | s.append("123", 1, 2); // 追加 "23" |
s.push_back(c) | 在字符串末尾添加单个字符 c | s.push_back('!'); // "hello" → "hello!" |
s.pop_back() | 删除字符串末尾的字符(C++11 起支持) | s.pop_back(); // "hello" → "hell" |
s.insert(pos, t) | 在位置 pos 插入字符串 t | s.insert(2, "xx"); // "hello" → "hexxllo" |
s.erase(pos, len) | 从位置 pos 开始删除 len 个字符(默认删到末尾) | s.erase(1, 2); // "hello" → "hlo" |
s.replace(pos, len, t) | 从位置 pos 开始的 len 个字符替换为 t | s.replace(1, 3, "XX"); // "hello" → "hXXo" |
函数 | 功能描述 | 示例代码 |
---|---|---|
s.find(t, pos) | 从位置 pos 开始查找子串 t,返回首次出现的位置;未找到返回 string::npos | size_t idx = s.find("ll"); // 2 |
s.rfind(t, pos) | 从位置 pos 开始反向查找子串 t,返回最后一次出现的位置 | s.rfind("l"); // 3 |
s.substr(pos, len) | 截取从位置 pos 开始的 len 个字符(默认到末尾) | string sub = s.substr(1, 3); // "ell" |
s.compare(t) | 字符串比较(字典序):0 相等,负数 s < t,正数 s > t | s.compare("hello"); // 0 |
s == t / s != t | 直接比较字符串是否相等(推荐,更直观) | if (s == "hello") { ... } |
函数 | 功能描述 | 示例代码 |
---|---|---|
s.begin() | 返回指向字符串首字符的迭代器 | for (auto it = s.begin(); it != s.end(); ++it) { cout << *it; } |
s.end() | 返回指向字符串尾字符后一位的迭代器(空终止符 '\0' 之后) | // 配合 begin() 使用 |
s.rbegin() | 返回反向迭代器,指向最后一个字符 | for (auto rit = s.rbegin(); rit != s.rend(); ++rit) { ... } |
s.rend() | 返回反向迭代器,指向第一个字符前一位 | // 用于逆序遍历 |
s[i] | 随机访问第 i 个字符(下标从 0 开始),不检查越界 | cout << s[2]; // 输出 'l' |
s.at(i) | 同 s[i],但会检查越界(越界时抛出 out_of_range 异常) | try { cout << s.at(10); } catch (const exception& e) { ... } |
函数 | 功能描述 | 示例代码 |
---|---|---|
stoi(s, pos, base) | 将字符串 s 转换为 int 类型,pos 存储转换后的位置,base 为进制(默认 10) | int num = stoi("123"); // 123 |
stol(s) / stoll(s) | 转换为 long / long long 类型 | long num = stol("1234567890"); |
stof(s) / stod(s) | 转换为 float / double 类型 | double d = stod("3.14"); |
to_string(num) | 将数值(如 int、double)转换为字符串 | string s = to_string(123.45); // "123.450000" |
函数 | 功能描述 | 示例代码 |
---|---|---|
tolower(c) | 将字符 c 转为小写(需包含 <cctype>) | char c = tolower('A'); // 'a' |
toupper(c) | 将字符 c 转为大写 | char c = toupper('b'); // 'B' |
批量转换 | 结合 transform 和迭代器实现 | transform(s.begin(), s.end(), s.begin(), ::tolower); // 全转小写 |
工具 | 功能描述 | 示例代码 |
---|---|---|
stringstream | 字符串流,用于分割字符串(按空格、逗号等) | string s = "hello world"; stringstream ss(s); string word; while (ss >> word) { ... } |
getline(cin, s) | 读取一行输入(包含空格),存入字符串 s | string s; getline(cin, s); // 输入 "a b c" → s = "a b c" |
regex(正则表达式) | 复杂字符串匹配与替换(需包含 <regex>) | regex pattern("\\d+"); string s = regex_replace("a1b2c3", pattern, "X"); // "aXbXcX" |
s.length()
返回的是可见字符数,不包含字符串末尾的 '\0'
(C++ 的 string
会自动管理 '\0'
)。输入四个字符串s1,s2,s3,s4,将s4的内容连接到s1的尾部,将s3的内容连接到s2的尾部,并比较新的s1与s2的大小,输出更大的字符串,若两字符串相等则输出:"~~~"
四行,每行一个字符串。字符串的长度不超过100
一行,比较后的结果。
输入
WhatHappended?
WhereAreYou?
IAmNotSure.
Nothing!
输出
WhereAreYou?IAmNotSure.
输入的字符串中不能有空格。
#include <iostream>
#include <string>
using namespace std;
int main(){
string s1,s2,s3,s4;
cin >> s1;
cin >> s2;
cin >> s3;
cin >> s4;
s1.append(s4);
s2.append(s3);
if(s1> s2){
cout << s1;
}else if(s1 == s2){
cout << "~~~";
} else{
cout << s2;
}
return 0;
}
编写程序,针对输入的N个不同的字符串,输出其中字典序最小的字符串。
第一行输入一个正整数N, 随后N行,每行给出一个长度小于80的非空字符串,其中不会出现空格。
输出字典序最小的字符串。
5
Li
Wang
Zha
Jin
Xian
Jin
1≤N≤100
#include <iostream>
#include <string>
using namespace std;
int main() {
int n;
cin >> n;
string min_str,current_str; // 用于存储当前字典序最小的字符串
cin >> min_str; // 先读入第一个字符串作为初始的最小字符串
for (int i = 1; i < n; i++) {
cin >> current_str;
if (current_str < min_str) {
min_str = current_str;
}
}
cout << min_str << endl;
return 0;
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。