蓝桥杯学习-字符串string类

一、cout控制符 【I/O操作重点】

#include   // 必须包含的头文件
常用控制符:
  1. setw(n)
    【作用】设置输出域宽(仅对下一个输出有效)
    【示例】cout << setw(5) << 10; → 10

  2. setfill('c')
    【作用】配合setw使用填充空白
    【示例】

    cout << setfill('*') << setw(5) << 10; // 输出 **10
  3. setprecision(n)
    【作用】设置浮点数精度(总位数或小数位数,根据模式)
    【示例】
    cout << fixed << setprecision(2) << 3.1415; // 输出3.14

    【对比C语言】
    C语言用printf("%*d", 5, 10)实现类似setw效果,但类型不安全

二、string类 【C++核心类型】

#include   // 必须包含的头文件
1. 初始化方式
string s1;                // 空字符串
string s2 = "hello";      // 直接赋值
string s3(5, 'A');        // 生成"AAAAA"
string s4(s2);            // 拷贝构造
string s5 = s2 + " world";// 字符串拼接

 2. 输入输出

string s;
cin >> s;                // 读到空格停止(输入"hi there"→s="hi")
getline(cin, s);         // 读取整行(包含空格)
cout << s;               // 直接输出(自动处理\0)

3. 常用方法
方法 作用 示例
s.length() / s.size() 获取有效字符数 "abc".size() →3
s.substr(pos, len) 截取子串 s="hello"; s.substr(1,3)→"ell"
s.find(str) 查找子串位置 s.find("ll")→2(未找到返回string::npos
s.insert(pos, str) 插入字符串 s.insert(2,"xx")→"hexxllo"
s.replace(pos, len, str) 替换子串 s.replace(1,2,"aa")→"haalo"

【对比C语言】
C语言使用char[]需要手动管理内存,strcmp等函数易出错

三、引用(Reference) 【C++核心特性】

基本特性
int x = 10;
int &r = x;  // r是x的别名(必须初始化)
r = 20;      // 等价于x=20

 函数参数应用

void swap(int &a, int &b) { // 引用参数
    int tmp = a;
    a = b;
    b = tmp;
}

int main() {
    int x=1, y=2;
    swap(x, y);  // 直接修改实参
}

【对比指针】

特性 引用 指针
初始化 必须 可选
空值 不能 可以
重定向 不能 可以

四、函数模板 【泛型编程基础】

基本语法
template   // 或 template 
T max(T a, T b) {
    return (a > b) ? a : b;
}

// 使用
cout << max(3, 5);     // 5(int版本)
cout << max(2.5, 1.8); // 2.5(double版本)
开发步骤
  1. 先实现具体类型函数

  2. 将需要泛化的类型替换为T

    int max(int a, int b) { ... }
    
    template 
    T max(T a, T b) { ... }

【对比C宏函数】 

#define MAX(a,b) ((a)>(b)?(a):(b))  // 可能引发副作用
MAX(++x, 10);  // 可能执行两次++x

易错点总结

  1. setw作用域

cout << setw(5) << 10 << 20; // 只对第一个10生效

     2. getline残留换行符

cin >> n; 
getline(cin, s); // 会读取之前输入n时的换行符
// 修正:cin.ignore() 

      3. 引用必须初始化

int &r;  // 错误!必须初始化

      4. 模板类型推导失败

max(3, 5.5); // 错误!T无法推导为int/double
max(3,5.5); // 正确

补充:

s.find(str,pos):

从pos位置开始进行查找,注意的是未查找到时所返回的类型不是int 

你可能感兴趣的:(蓝桥杯,学习,职场和发展)