C++ 中的操纵符

2025年8月2日 | 阅读 9 分钟

在 C++ 编程语言中,“操纵符”一词表示操纵或修改某些内容。操纵符用作辅助函数,可以修改 I/O 流,并且可以包含在 I/O 语句中以修改流的格式参数。这些操纵符在两个头文件 中定义。这些操纵符使用插入 ( << ) 和提取 ( >> ) 运算符来修改输出。

C++ 中操纵符的类别

我们可以将操纵符分为两类

Manipulators in C++
  1. 非参数(普通)操纵符
  2. 参数化操纵符

在这里,我们将逐一讨论这些操纵符。

非参数(普通)操纵符

C++ 编程语言中,非参数操纵符是预定义的流操纵符,不接受任何参数。如果我们在 C++ 中使用这些操纵符,它们可以直接影响 I/O 流的格式和行为,并且主要用于控制输出显示。这些操纵符在 头文件中可用。非参数操纵符包含几个操纵符,例如 endl、flush、ws、boolalpha、noboolalpha、dec、hex、oct、showbase、showpos 等。

参数化操纵符

在 C++ 编程中,参数化操纵符是接受参数的特殊操纵符,通常在 C++ 标准 头文件中定义。与非参数操纵符(如 endl、setw、hex)不同,它们需要额外的数据来修改流的格式。

参数化操纵符是一个函数,它接受一个或多个参数并返回对流的引用,从而修改其状态或格式行为。这些操纵符用于设置精度、宽度、填充字符、对齐方式等。

操纵符的类型

C++ 中主要有五种类型的操纵符。它们如下所示

Manipulators in C++

在这里,我们将逐一讨论所有这些操纵符。

输入流操纵符

在 C++ 中,输入流操纵符用于修改输入流的行为,这有助于处理输入值。例如,如果我们在 ws 中有一些未使用的空格,我们可以使用输入流操纵符来跳过这些空格。

尽管有各种输入流操纵符,但其中一些常见的是

  • ws: 它在 头文件中可用。它用于跳过输入流中的前导空格。
  • noskipws: 此输入流操纵符在 头文件中可用。它用于禁用跳过前导空格。

输入流操纵符示例

让我们举一个例子来说明 C++ 中的输入流操纵符。

输入

输出

c1: x, c2: y 

说明

在此示例中,我们使用了两个名为 c1 和 c2 的 char 变量。之后,它提示用户输入 c1 和 c2 的值,不使用任何空格。最后,它使用 cout 函数打印 c1 和 c2 的结果。

输出流操纵符

在 C++ 编程语言中,输出流操纵符用于格式化和控制输出流。如果我们要更好地呈现输出,则使用它很合适。例如,如果我们要设置输出值的精度、宽度或对齐方式,请使用输出流操纵符。

尽管有几个输出流操纵符可用,但其中一些如下所示

  • Showpoint: 它用于强制显示小数点,并且在 头文件中可用。
  • Noshowpoint: 它用于隐藏小数点,除非需要,并且在 头文件中存在。
  • Endl: 它用于插入新行并刷新输出流,并且在 头文件中可用。
  • Fixed: 它用于以定点表示法显示数字,并且在 头文件中存在。
  • Flush: 它用于手动刷新输出流,并且在 头文件中可用。
  • setw(a): 它用于将下一个输出字段的宽度设置为 a,并且在 头文件中可用。
  • scientific: 它主要用于以科学计数法显示数字,并且在 头文件中可用。
  • setprecision(a): 它用于将浮点数的精度设置为 a,并且在 头文件中可用。

输出流操纵符示例

让我们举一个例子来说明 C++ 中的输出流操纵符。

示例

编译并运行

输出

Hello
TpointTech

Using setw manipulator:
    25

Using setfill with setw:
++++25

Using setprecision:
3.14
3.1416

说明

在此示例中,我们演示了 C++ 输出流操纵符(例如 endl、setw、setfill 和 setprecision)的使用。这些操纵符通过控制换行符、字段宽度、填充字符和小数精度来格式化输出。

基本操纵符

在 C++ 编程语言中,基本操纵符主要用于更改输出流中显示整数值的数字系统。如果我们要以不同的基数(例如十进制、八进制和十六进制格式)格式化数字,这些操纵符非常有用。

C++ 中有几个常见的基本操纵符。其中一些如下所示

  • hex: 它以十六进制基数显示输出,并且在 头文件中可用。
  • dec: 它以十进制基数显示输出,并且在 头文件中可用。
  • oct: 它以八进制基数显示输出,并且在 头文件中可用。

C++ 中的基本操纵符示例

让我们举一个例子来说明 C++ 中的基本操纵符。

示例

编译并运行

输出

Decimal: 58
Octal: 72
Hexadecimal: 3a

说明

在此示例中,我们演示了使用基本格式操纵符以不同的数字系统显示整数 num。之后,它使用 cout 流以十进制、八进制和十六进制格式显示数字 58。

布尔操纵符

在 C++ 编程语言中,布尔操纵符主要用于格式化输出流中的 布尔 值。这些操纵符允许显示布尔值(真或假)或(0 或 1),这取决于系统要求。但是,我们可以使用布尔操纵符(例如 std::boolalpha 和 std::noboolalpha)来操纵输出的格式。

C++ 中主要有两种类型的布尔操纵符。它们如下所示

  • boolalpha: 它用于显示布尔值的真或假,并且在 头文件中可用。
  • noboolalpha: 它用于显示布尔值的 0 或 1,并且在 头文件中可用。

C++ 中的布尔操纵符示例

让我们举一个例子来说明 C++ 中的布尔操纵符。

示例

编译并运行

输出

Default bool output: 1
Using boolalpha: true
Using noboolalpha: 1 

说明

在此示例中,我们演示了 C++ 中的布尔操纵符。首先,我们使用名为 val 的布尔变量,并将其初始化为 true。之后,我们使用 boolalpha 和 noboolalpha 操纵符来格式化布尔值。最后,它使用 cout 函数显示输出。

对齐和符号操纵符

在 C++ 编程语言中,对齐和符号操纵符主要用于控制文本和数字的对齐方式以及如何在输出中显示它们的符号。我们可以将这些操纵符与输出流 (cout) 一起使用,并且通常与 头文件中的格式化函数结合使用。

C++ 中有几个对齐和符号操纵符。其中一些如下所示

  • left: 它用于将输出向左对齐,并与 头文件一起使用。
  • right: 它用于将输出向右对齐,并与 头文件一起使用。
  • internal: 它用于将符号和基本前缀向左对齐,并与 头文件一起使用。
  • showpos: 它用于显示正数的前缀加号 (+),并与 头文件一起使用。
  • noshowpos: 它用于隐藏正数的前缀加号 (+),并与 头文件一起使用。

C++ 中的对齐和符号操纵符示例

让我们举一个例子来说明 C++ 中的对齐和符号操纵符。

示例

编译并运行

输出

Default (right aligned):
        27
Left aligned:
27        
Internal alignment with sign:
+       27
Right aligned with sign:
       +27
Right aligned with sign:
        27 

说明

在此示例中,我们演示了如何使用对齐和符号操纵符来格式化整数输出。首先,setw(10) 将输出字段宽度设置为 10 个字符,而 left、right 和 internal 控制该字段中值的对齐方式。之后,showpos 和 noshowpos 操纵符控制是否显示正数的正号 (+)。

C++ 操纵符 MCQ

1) 识别我们可以用来设置浮点数小数精度的 C++ 操纵符。

  1. std::setw
  2. std::setprecision
  3. std::fixed
  4. std::setfill
 

答案: b) std::setprecision


2) 识别 C++ 中“std::fixed”操纵符的正确用法。

  1. 设置输出字段的宽度
  2. 将输出设置为科学计数法
  3. 用指定字符填充空位
  4. 将输出设置为定点表示法
 

答案: d) 将输出设置为定点表示法


3) 我们应该使用哪个 C++ 操纵符来以十六进制格式显示给定输入?

  1. std::oct
  2. std::fixed
  3. std::hex
  4. std::dec
 

答案: c) std::hex


4) 哪个 C++ 操纵符可用于刷新输出缓冲区而无需插入新行?

  1. std::flush
  2. std::setfill
  3. std::endl
  4. std::setw
 

答案: a) std::flush


5) 以下哪项是 C++ 中 std::showpos 操纵符的正确用法?

  1. 它将输出设置为八进制格式
  2. 它显示正数的正号
  3. 它将输出设置为十六进制格式。
  4. 它隐藏正数的正号。
 

答案: b) 它显示正数的正号。