📜  C++字符串类及其应用(1)

📅  最后修改于: 2023-12-03 14:59:51.922000             🧑  作者: Mango

C++字符串类及其应用

什么是C++字符串类?

在C++中,字符串是一组字符序列,被封装在字符串类中,以便于处理和操作。C++内置了一个字符串类,名为std::string,使用该类可以方便地完成各种字符串操作。

C++字符串类的基本用法
创建字符串对象

直接创建

可以直接创建字符串对象,例如:

std::string str = "Hello, World!";

从其他字符数组中创建

可以从其他字符数组中创建字符串对象,例如:

char arr[] = "Hello, World!";
std::string str(arr);
访问字符串对象中的字符

使用下标操作符[]可以访问字符串对象中的字符。注意下标从0开始,例如:

std::string str = "Hello, World!";
std::cout << str[0] << std::endl; // 输出 'H'
修改字符串对象中的字符

使用下标操作符[]可以修改字符串对象中的字符,例如:

std::string str = "Hello, World!";
str[0] = 'h'; // 将第一个字符'H'改为小写'h'
std::cout << str << std::endl; // 输出 'hello, World!'
获取字符串对象的长度

可以使用size()函数获取字符串对象的长度,例如:

std::string str = "Hello, World!";
std::cout << str.size() << std::endl; // 输出 '13'
拼接字符串对象

使用"+"操作符可以拼接两个字符串对象,例如:

std::string str1 = "Hello, ";
std::string str2 = "World!";
std::string str3 = str1 + str2;
std::cout << str3 << std::endl; // 输出 'Hello, World!'
查找子字符串

可以使用find()函数查找子字符串在原字符串中的位置,例如:

std::string str = "Hello, World!";
size_t pos = str.find("World");
if (pos != std::string::npos) {
    std::cout << "Found at position " << pos << std::endl; // 输出 'Found at position 7'
} else {
    std::cout << "Not found" << std::endl;
}
截取子字符串

可以使用substr()函数截取字符串的子字符串,例如:

std::string str = "Hello, World!";
std::string substr = str.substr(7, 5); // 从位置7开始,截取5个字符
std::cout << substr << std::endl; // 输出 'World'
C++字符串类的高级用法
字符串流

字符串流是一种特殊的流,它可以将字符序列作为输入或输出。C++提供了istringstream类和ostringstream类来实现字符串流。例如:

std::string str = "100 200 300";
std::istringstream iss(str);
int num1, num2, num3;
iss >> num1 >> num2 >> num3;
std::cout << num1 << ", " << num2 << ", " << num3 << std::endl; // 输出 '100, 200, 300'

另外,也可以将输出流转换为字符串,例如:

std::ostringstream oss;
oss << "Hello, " << "World!";
std::string str = oss.str();
std::cout << str << std::endl; // 输出 'Hello, World!'
正则表达式

正则表达式是一种匹配字符串的模式,可以用于查找、替换或分割字符串。C++中可以使用regex类来操作正则表达式。例如:

std::string str = "abc 123 def 456 ghi";
std::regex reg("\\d+"); // 匹配连续的数字
std::sregex_iterator it(str.begin(), str.end(), reg);
std::sregex_iterator end;
while (it != end) {
    std::smatch match = *it;
    std::cout << match.str() << std::endl; // 输出 '123', '456'
    it++;
}
密码安全

在实际应用中,密码是一种十分敏感的信息。为了保证密码的安全,可以使用C++中的加密算法来加密密码。常见的加密算法有MD5、SHA1等。例如:

#include <openssl/md5.h>

std::string md5(const std::string& str) {
    unsigned char result[MD5_DIGEST_LENGTH];
    MD5((const unsigned char*)str.c_str(), str.size(), result);

    std::stringstream ss;
    for (int i = 0; i < MD5_DIGEST_LENGTH; i++) {
        ss << std::hex << std::setw(2) << std::setfill('0') << (int)result[i];
    }

    return ss.str();
}

std::string password = "123456";
std::string encrypted_password = md5(password);
std::cout << encrypted_password << std::endl; // 输出 'e10adc3949ba59abbe56e057f20f883e'
总结

C++字符串类std::string可以方便地完成各种字符串操作,包括创建、访问、修改、拼接、查找和截取等。另外,C++还提供了字符串流和正则表达式等功能强大的工具来处理字符串,可以满足不同的需求。