本文共 2211 字,大约阅读时间需要 7 分钟。
字符串在 C++ 中是预定义的类 std::string,与 C 语言的字符串类型不同,前者是对象类型,支持更多操作。
string S1; // 空字符string S2 = "Hello"; // 拷贝初始化string S3{"Hello"}; // 直接初始化string S4(10); 或 string S4 = string(10); 只能使用直接初始化,string S2 = "a"; 和 string S3("a") 均支持拷贝和直接初始化。输入:使用 std::cin,自动忽略前置空白。
string s;cin >> s; // 忽略前置空白,读取并去除末尾空白
使用 std::getline() 保留空白:
string s;string line = std::getline(s); // 不包括换行符
字符串大小:size_type 是无符号类型,可处理最大值,size() 计算字符串长度不含最后一个空字符。
string s = "a";cout << s.size() << endl; // 输出 1
字符操作:
for (auto a : s) { // 遍历字符引用 cout << a << endl; // 修改字符时用引用}s = "HELLO"; // 简单替换for (int i = 0; i < s.size(); ++i) { // 用下标访问字符 s[i] = toupper(s[i]);}转换:将其他类型转换为字符串:
int i = 42;string s = to_string(i); // 转换为字符串
向量是容器,用于存储多个相同类型的对象。
vectorarticles = {"a", "an", "the"}; // 拷贝初始化vector v; // 空向量vector ivec; // 默认初始化为 0
vectorvecOfvec{10}; // 10 个空字符串vector v(10, 42); // 10 个 42vecOfvec.resize(10, "default"); // 具体初始化可选
size_type,不含最后一个元素。int main() { vector ivec(10); cout << ivec.size() << endl; // 输出 10} []:ivec[5] = 100;
push_back(),插入操作使现有迭代器失效。C++ 标准容器提供迭代器,用于遍历数据。
begin() 到 end()。string s = "Hello";auto iter = s.begin();while (iter != s.end()) { *iter++ = toupper(*iter);}cbegin() 和 cend()const auto& cr = s.cbegin();
std::next 和 std::prev 可用于移动迭代器。int main() { vector ivec = {1, 2, 3}; auto it = begin(ivec); // 返回类型为 vector ::iterator // 迭代操作} C++ 支持通过迭代器操作数组。
数组转换为指针:
int a[] = {1, 2, 3}; // 数组声明int* pb = std::begin(a); // 返回指针迭代器int* pe = std::end(a); // 指向尾下一个元素 while (pb != pe) { // 遍历数组元素} std::distance 计算两个迭代器间的差距:auto diff = std::distance(pb, pe); // 返回类型为 ptrdiff_t
通过以上内容可以清晰了解如何在 C++ 中使用字符串、向量、迭代器和数组进行操作,提升代码的生产力。
转载地址:http://lkodz.baihongyu.com/