信奥崔老师:字符串 (String) 与 表达式 (Expression)

86 阅读5分钟

4. 字符串 (String) 与 表达式 (Expression)

图片

** **

4.1 概念介绍
  • 字符串 (String):由零个或多个字符组成的序列,通常用来表示文本。在C++中,字符串被双引号 " 包围。
  • 表达式 (Expression) :由运算符、常量、变量、函数调用等组合而成的、能够计算出一个的式子。例如,5 + 3 是一个表达式,其计算结果是8。
4.2 算法步骤

使用字符串

  1. 包含头文件:要使用C++标准字符串类 std::string,需要包含头文件 <string>
  2. 定义字符串变量std::string myString = "Hello";
  3. 操作字符串:可以使用 + 进行拼接,或使用其成员函数进行各种操作。

构建表达式

  1. 确定操作数:选择要参与运算的变量、常量或字面值。
  2. 选择运算符:根据需要选择算术运算符(+-*/%)、关系运算符(><==)、逻辑运算符(&&||!)等。
  3. 组合:将操作数和运算符按语法规则组合起来。
  4. 求值:编译器/程序会根据运算符的优先级和结合性计算表达式的结果。
4.3 算法可视化SVG图示

图片

** **
4.4 核心特性
  • 字符串
    • 动态长度std::string 的长度可以根据内容动态变化。
    • 丰富的操作:提供了查找、替换、拼接、截取等多种功能。
  • 表达式
    • 有值性:任何表达式都有一个计算结果(值),这个值也有其类型。
    • 副作用:某些表达式除了产生值外,还会改变变量的状态,如 x++
    • 优先级和结合性:运算符有不同的优先级(如乘法优先于加法),相同优先级的运算符有结合性(如 a-b-c 从左到右计算)。
2.5 C++代码基础实现
#include <iostream>
#include <string> // 必须包含 string 头文件

int main() {
    // ---- 字符串 ----
    std::string firstName = "Lihua";
    std::string lastName = "Wang";
    
    // 字符串拼接
    std::string fullName = firstName + " " + lastName;
    std::cout << "Full Name: " << fullName << std::endl;
    
    // ---- 表达式 ----
    int a = 10;
    int b = 5;
    int c = 2;
    
    // 算术表达式
    int result1 = a + b * c; // 结果是 10 + (5 * 2) = 20
    std::cout << "a + b * c = " << result1 << std::endl;
    
    // 关系表达式,其结果是布尔值 (true 或 false)
    bool isGreater = (a > b); // 结果是 true
    std::cout << "Is a > b? " << std::boolalpha << isGreater << std::endl// std::boolalpha 使输出为 true/false
    
    // 赋值表达式
    // 整个表达式 (c = a + b) 的值是赋给c的值,即15
    int d = (c = a + b); 
    std::cout << "c is " << c << ", d is " << d << std::endl;

    return 0;
}
2.6 优化策略
  • 字符串:在大量拼接字符串时,使用 += 操作符通常比反复使用 + 创建新字符串更高效。
  • 表达式
    • 使用括号:当不确定运算符优先级时,使用 () 来明确计算顺序,提高代码可读性。
    • 简化表达式:避免写过于复杂和冗长的表达式,可以拆分成多个步骤,用中间变量存储结果。
2.7 优缺点
  • 字符串 (std::string)
    • 优点:使用方便,安全,功能强大。
    • 缺点:相比C风格字符数组,可能有效率开销。
  • 表达式
    • 优点:能以简洁的方式表达复杂的计算逻辑。
    • 缺点:复杂的表达式可读性差,容易出错。
2.8 应用场景
  • 字符串
    • 处理用户姓名、地址等文本信息。
    • 读取或写入文件内容。
    • 在程序中显示提示信息或结果。
  • 表达式
    • 进行任何形式的数学计算。
    • 在 ifwhile 等语句中构造判断条件。
    • 计算并给变量赋值。
2.9 扩展
  • C风格字符串:C++也支持C语言风格的字符串,即以空字符 \0 结尾的字符数组(char[])。在底层操作或与C库交互时会用到。
  • 类型转换:表达式中不同类型的变量运算时,会发生隐式类型转换(如 int 和 double 相加,int 会被提升为 double)。
  • 短路求值:逻辑与 && 和逻辑或 || 运算符具有短路特性。例如,对于 A && B,如果 A 为假,则 B 不会被计算。
2.10 课后配套练习
  1. 题目:定义两个字符串变量,分别存储你的姓和名,然后将它们拼接成一个完整的姓名(中间加一个空格),并打印出来。
    • C++代码实现

      #include <iostream>
      #include <string>
      int main() {
          std::string firstName = "San";
          std::string lastName = "Zhang";
          std::string fullName = lastName + " " + firstName;
          std::cout << fullName << std::endl;
          return 0;
      }
      
  2. 题目:计算表达式 (100 + 200) * 3 / 2 的值并打印。
    • C++代码实现

      #include <iostream>
      int main() {
          int result = (100 + 200) * 3 / 2;
          std::cout << "Result: " << result << std::endl// 结果是 450
          return 0;
      }
      
  3. 题目:输入一个圆的半径,计算并输出它的周长和面积。圆周率取3.14。
    • C++代码实现

      #include <iostream>
      int main() {
          const double PI = 3.14;
          double radius;
          std::cout << "Enter the radius: ";
          std::cin >> radius;
          double circumference = 2 * PI * radius;
          double area = PI * radius * radius;
          std::cout << "Circumference: " << circumference << std::endl;
          std::cout << "Area: " << area << std::endl;
          return 0;
      }
      
  4. 题目:判断一个整数 n 是否能同时被3和5整除。输出 true 或 false
    • C++代码实现

      #include <iostream>
      int main() {
          int n = 15;
          bool divisible = (n % 3 == 0) && (n % 5 == 0);
          std::cout << std::boolalpha << divisible << std::endl;
          return 0;
      }
      
  5. 题目:给定华氏温度 F,计算对应的摄氏温度 C。转换公式为 C = 5/9 * (F - 32)。注意整数除法问题。
    • C++代码实现

      #include <iostream>
      int main() {
          double fahrenheit = 98.6;
          // 必须使用 5.0 / 9.0 进行浮点数除法
          double celsius = 5.0 / 9.0 * (fahrenheit - 32);
          std::cout << fahrenheit << " F is " << celsius << " C" << std::endl;
          return 0;
      }
      

11. 相关网络资源推荐

  • cppreference.com: 最权威的C++参考手册,适合查阅关键字、标准库等详细信息。
    • C++关键字列表
  • LearnCpp.com: 非常适合初学者的免费教程网站,讲解详细,循序渐进。
    • Chapter 1: C++ Basics
      第 1 章:C++ 基础知识
  • cplusplus.com: 另一个流行的C++学习和参考网站。
    • Variables and types  变量和类型
  • 菜鸟教程 (runoob.com) : 中文教程,适合快速入门。
    • C++ 基础语法