C++ 编程基础:注释、字符串、输入输出、日期处理、修饰符

文章目录

C++ 作为一门广泛应用的编程语言,掌握其基础的语法元素和操作对于初学者而言至关重要。在本篇博客中,我们将深入探讨 C++ 中的注释、字符串、基本的输入输出操作以及日期处理,通过详细的讲解和丰富的代码示例,帮助大家更好地理解和运用这些知识。

注释

在 C++ 编程里,注释是一种极为有用的工具,它能够提升代码的可读性与可维护性。注释并不会被编译器编译,其主要作用是为开发者提供代码的相关说明和解释。

C++ 支持两种类型的注释:单行注释和多行注释。

单行注释

单行注释以 // 开头,从 // 开始到该行结束的所有内容都会被视为注释。以下是一个简单的示例:

cpp 复制代码
#include <iostream>
// 这是一个单行注释,用于输出欢迎信息
int main() {
    std::cout << "Welcome to C++ programming!" << std::endl;
    return 0;
}

在上述代码中,// 这是一个单行注释,用于输出欢迎信息 就是一个单行注释,它为后续的代码功能提供了简要说明。

多行注释

多行注释以 /* 开头,以 */ 结尾,在这两个符号之间的所有内容都会被当作注释。示例如下:

cpp 复制代码
#include <iostream>
/*
这是一个多行注释,
可以包含多行文本,
用于详细解释代码的功能和设计思路。
*/
int main() {
    std::cout << "This code is explained by multi - line comment." << std::endl;
    return 0;
}

在这个例子中,多行注释对代码的功能和设计思路进行了较为详细的解释。

字符串

在 C++ 中,字符串是用于存储和处理文本数据的重要数据类型。C++ 提供了两种处理字符串的方式:C 风格字符串和 std::string 类。

C 风格字符串

C 风格字符串实际上是一个以空字符 '\0' 结尾的字符数组。以下是一个简单的示例:

cpp 复制代码
#include <iostream>
#include <cstring>

int main() {
    // 声明并初始化一个 C 风格字符串
    char greeting[] = "Hello, C++!";
    // 输出 C 风格字符串
    std::cout << "Greeting: " << greeting << std::endl;

    // 计算字符串的长度
    int length = strlen(greeting);
    std::cout << "Length of the greeting: " << length << std::endl;

    return 0;
}

在上述代码中,我们声明并初始化了一个 C 风格字符串 greeting,然后使用 std::cout 输出该字符串。同时,我们使用 头文件中的 strlen 函数来计算字符串的长度。

std::string 类

std::string 类是 C++ 标准库提供的用于处理字符串的类,它封装了 C 风格字符串的操作,提供了更丰富的功能和更方便的接口。示例如下:

cpp 复制代码
#include <iostream>
#include <string>

int main() {
    // 声明并初始化一个 std::string 对象
    std::string message = "Welcome to C++ world!";
    // 输出 std::string 对象
    std::cout << "Message: " << message << std::endl;

    // 获取字符串的长度
    size_t len = message.length();
    std::cout << "Length of the message: " << len << std::endl;

    // 字符串拼接
    std::string additional = " Enjoy coding!";
    message += additional;
    std::cout << "Combined message: " << message << std::endl;

    return 0;
}

在这个示例中,我们创建了一个 std::string 对象 message,并对其进行了输出、获取长度和字符串拼接等操作。std::string 类的 length 方法用于获取字符串的长度,使用 += 运算符可以方便地进行字符串拼接。

基本的输入输出

在 C++ 中,标准库提供了强大的输入输出流对象,主要包括 std::cin 用于输入,std::cout 用于输出。

输出操作

std::cout 是标准输出流对象,通常用于向控制台输出信息。以下是一个简单的输出示例:

cpp 复制代码
#include <iostream>

int main() {
    int number = 10;
    std::string name = "Alice";

    // 输出整数
    std::cout << "The number is: " << number << std::endl;
    // 输出字符串
    std::cout << "The name is: " << name << std::endl;

    return 0;
}

在上述代码中,我们使用 std::cout 输出了一个整数和一个字符串。<< 是插入运算符,用于将数据插入到输出流中,std::endl 用于换行并刷新输出缓冲区。

输入操作

std::cin 是标准输入流对象,用于从控制台读取用户输入的数据。示例如下:

cpp 复制代码
#include <iostream>
#include <string>

int main() {
    int age;
    std::string hobby;

    // 读取整数输入
    std::cout << "Please enter your age: ";
    std::cin >> age;

    // 读取字符串输入
    std::cout << "Please enter your hobby: ";
    std::cin >> hobby;

    std::cout << "You are " << age << " years old and your hobby is " << hobby << "." << std::endl;

    return 0;
}

在这个示例中,我们使用 std::cin 分别读取了用户输入的整数和字符串,并将其存储在相应的变量中,最后输出这些信息。>> 是提取运算符,用于从输入流中提取数据。

输入输出格式控制

有时候,我们需要对输入输出的格式进行控制,例如设置输出的精度、对齐方式等。C++ 提供了 头文件来实现这些功能。以下是一个设置输出精度的示例:

cpp 复制代码
#include <iostream>
#include <iomanip>

int main() {
    double pi = 3.14159265358979323846;
    // 设置输出精度为 5 位小数
    std::cout << std::fixed << std::setprecision(5) << "Pi is approximately: " << pi << std::endl;

    return 0;
}

在上述代码中,我们使用了 头文件中的 std::fixed 和 std::setprecision 来设置输出的精度为 5 位小数。

日期处理

在 C++ 中,日期处理可以借助标准库中的 头文件来实现。该头文件提供了一些函数和类型,用于处理日期和时间。

获取当前时间

以下是一个获取当前时间并输出的示例:

cpp 复制代码
#include <iostream>
#include <ctime>

int main() {
    // 获取当前时间
    std::time_t currentTime = std::time(nullptr);

    // 将时间转换为字符串形式
    char* timeString = std::ctime(&currentTime);

    std::cout << "Current time is: " << timeString << std::endl;

    return 0;
}

在这个示例中,我们使用 std::time(nullptr) 函数获取当前的时间戳,然后使用 std::ctime 函数将时间戳转换为字符串形式并输出。

日期和时间的格式化输出

我们可以使用 std::strftime 函数对日期和时间进行格式化输出。示例如下:

cpp 复制代码
#include <iostream>
#include <ctime>
#include <iomanip>

int main() {
    std::time_t currentTime = std::time(nullptr);
    std::tm* localTime = std::localtime(&currentTime);

    char buffer[80];
    // 格式化日期和时间
    std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localTime);

    std::cout << "Formatted current time: " << buffer << std::endl;

    return 0;
}

在上述代码中,我们使用 std::localtime 函数将时间戳转换为本地时间结构 std::tm,然后使用 std::strftime 函数按照指定的格式(%Y-%m-%d %H:%M:%S)将时间信息存储在字符数组 buffer 中并输出。

修饰符

在 C++ 中,修饰符用于改变数据类型或表达式的行为,是编程中不可或缺的重要工具。我们将从数据类型修饰符和流操作符修饰符两方面进行讲解。

  • 数据类型修饰符
    数据类型修饰符用于改变变量的存储特性或访问权限,常见的包括 const、volatile、static 等。

const 修饰符

const 用于声明常量,保证变量值在初始化后不可修改。

cpp 复制代码
#include <iostream>

int main() {
    const int MAX_VALUE = 100; // 声明常量
    // MAX_VALUE = 200;  // 错误:无法修改 const 变量

    const int* ptr = &MAX_VALUE; // 指向常量的指针
    int const* ptr2 = &MAX_VALUE; // 等价写法

    int value = 50;
    int* const constPtr = &value; // 指针本身是常量
    // constPtr = &MAX_VALUE;  // 错误:无法修改 const 指针
    *constPtr = 60; // 允许修改指向的值

    return 0;
}

volatile 修饰符

volatile 告知编译器变量可能被异步修改(如硬件寄存器或多线程环境),阻止编译器优化。

cpp 复制代码
volatile int hardwareRegister = 0; // 硬件寄存器变量

void readRegister() {
    int value = hardwareRegister; // 每次读取都实际访问内存
    // ...
}

static 修饰符

static 控制变量的作用域和存储周期:

  • 局部静态变量:在函数内保持状态
  • 全局静态变量:限制作用域为当前文件
  • 类静态成员:属于类而非实例
cpp 复制代码
#include <iostream>

void counter() {
    static int count = 0; // 局部静态变量
    count++;
    std::cout << "Count: " << count << std::endl;
}

class Singleton {
private:
    static Singleton instance; // 类静态成员
    Singleton() {}
public:
    static Singleton& getInstance() {
        return instance;
    }
};

int main() {
    counter(); // 输出 Count: 1
    counter(); // 输出 Count: 2

    Singleton::getInstance(); // 访问类静态方法
    return 0;
}

extern 修饰符

extern 声明外部变量,用于跨文件访问。

cpp 复制代码
// file1.cpp
extern int globalVar; // 声明外部变量
void useGlobal() { std::cout << globalVar << std::endl; }

// file2.cpp
int globalVar = 42; // 定义全局变量

流操作符修饰符

流操作符修饰符用于控制输入输出格式,主要通过 头文件实现。

格式控制修饰符

修饰符 说明 示例
std::endl 换行并刷新缓冲区 std::cout << "Line" << std::endl;
std::flush 刷新输出缓冲区 std::cout << "Flush" << std::flush;
std::hex 设置十六进制输出 std::cout << std::hex << 255;
std::dec 设置十进制输出(默认) std::cout << std::dec << 0xFF;
std::oct 设置八进制输出 std::cout << std::oct << 255;
std::left 左对齐 std::cout << std::left << std::setw(10) << "Left";
std::right 右对齐(默认) std::cout << std::right << std::setw(10) << "Right";
std::setw 设置字段宽度 std::cout << std::setw(10) << 123;
std::setprecision 设置浮点数精度 std::cout << std::setprecision(4) << 3.14159;
cpp 复制代码
#include <iostream>
#include <iomanip>

int main() {
    // 数值进制转换
    int number = 255;
    std::cout << "Hex: " << std::hex << number << std::endl;  // FF
    std::cout << "Dec: " << std::dec << number << std::endl;  // 255
    std::cout << "Oct: " << std::oct << number << std::endl;  // 377

    // 对齐与宽度控制
    std::cout << std::left << std::setw(15) << "Name" 
              << std::right << std::setw(5) << "Age" << std::endl;
    std::cout << std::left << std::setw(15) << "Alice" 
              << std::right << std::setw(5) << 30 << std::endl;

    // 浮点数精度
    double pi = 3.1415926535;
    std::cout << std::fixed << std::setprecision(3) << pi << std::endl; // 3.142

    return 0;
}
相关推荐
牵牛老人3 分钟前
C++设计模式-抽象工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析
c++·设计模式·抽象工厂模式
John_ToDebug3 分钟前
Chrome V8 引擎功能介绍、性能优化及未来改进方向
c++·chrome·性能优化
cdut_suye14 分钟前
全面剖析 Linux 进程管理与 PCB 机制
java·linux·运维·服务器·c++·人工智能·python
仟濹18 分钟前
【算法 C/C++】二维前缀和
c语言·c++·算法
Chenyu_31023 分钟前
04.基于C++实现多线程TCP服务器与客户端通信
linux·服务器·网络·c++·tcp/ip·算法·visualstudio
晴空对晚照41 分钟前
[动手学习深度学习]12.权重衰退
人工智能·深度学习·学习
音视频牛哥1 小时前
C++20之2025年上桌我坐哪儿?
c++·编程语言·ai 编程
宇寒风暖1 小时前
HTML嵌入CSS样式超详解(尊享)
前端·css·笔记·学习·html
不爱学习的小枫1 小时前
scala的集合
开发语言·scala
梦醒沉醉1 小时前
Scala的初步使用
开发语言·后端·scala