c++ 字符串拼接

发布时间:2024年01月17日

在 C++ 中,可以使用多种方式来拼接(或称为连接)字符串,我们这期记录的是使用std::string 类提供的几个用于拼接字符串的成员函数以及重载了 += 运算符。以及在C语言中的函数进行拼接。

欢迎大家补充说明!!!

使用 + 操作符拼接 std::string

字符串字面量(比如 "Hello, ")也可以直接与 std::string 对象使用 + 操作符拼接

#include <iostream>
#include <string>

int main() {
	std::string str1 = "Hello";
	std::string str2 = ", World!";
	std::string str3 = str1 + str2; // str3 是 "Hello, World!"
	std::cout << str3 << std::endl;  // 输出: Hello, World!
	// 使用 operator+ 添加单个字符
	std::string exclamation = "!";
	std::string str4 = str3 + exclamation; // str4 是 "Hello, World!!"
	// 使用 operator+ 添加 C 风格字符串
	std::string str5 = str4 + " How are you today?"; // str5 是 "Hello, World!!! How are you today?"

    return 0;
}
使用 += 操作符追加字符串

如果要将新字符串追加到现有的字符串上,可以使用 += 操作符,这种方法会在现有的字符串对象上直接追加内容,而不是创建一个新的字符串对象

#include <iostream>
#include <string>

int main() {
    std::string greeting = "Hello, ";
    greeting += "World!";
    std::cout << greeting << std::endl;  // 输出: Hello, World!
    return 0;
}
使用 append() 方法追加字符串

append() 方法,用于将一个字符串追加到另一个字符串的末尾,append() 方法有几个重载,允许指定追加字符串的特定部分或重复多次追加同一字符串。

#include <iostream>
#include <string>

int main() {
    std::string greeting = "Hello, ";
    greeting.append("World!");
    std::cout << greeting << std::endl;  // 输出: Hello, World!
    return 0;
}
使用 insert() 方法
std::string str1 = "Hello";
std::string str2 = ", World!";
str1.insert(str1.size(), str2); // str1 现在是 "Hello, World!"
使用 std::stringstream

如果需要连续地拼接很多片段,使用 std::stringstream 可以更方便地构建字符串,std::stringstream 非常灵活,可以方便地将各种数据类型转换成字符串并进行拼接。

#include <iostream>
#include <string>
#include <sstream>

int main() {
    std::stringstream ss;
    ss << "Hello, ";
    ss << "World";
    ss << '!';
    std::string combined = ss.str();
    std::cout << combined << std::endl;  // 输出: Hello, World!
    return 0;
}
使用 std::string 的构造函数

通过连接字符数组的方式来创建新的 std::string 对象

#include <iostream>
#include <string>

int main() {
    const char* part1 = "Hello, ";
    const char* part2 = "World!";
    std::string combined(part1);
    combined += part2;
    std::cout << combined << std::endl;  // 输出: Hello, World!
    return 0;
}
使用push_back

push_back 方法是向字符串的末尾添加单个字符的简便方式,
每次调用 push_back 都会附加一个新的字符到 std::string 的末尾。
如果你需要将单个字符附加到现有字符串中,你可以使用这个方法。请注意,push_back 仅适用于添加单个字符,而不适用于整个字符串。
使用 push_back 的好处是它可以直接向字符串内部的字符缓冲区添加数据,这样可以避免不必要的内存分配操作。在需要逐个字符构建字符串的情况下,这个方法是非常高效的。
然而,如果你需要添加更多的字符或者另一个字符串,使用 += 运算符或 append 方法会更加方便。

std::string str = "Hello";
str.push_back(','); // 添加一个逗号
str.push_back(' '); // 添加一个空格
str.push_back('W'); // 接着添加字符 'W'
str.push_back('o');
str.push_back('r');
str.push_back('l');
str.push_back('d');
str.push_back('!'); // str 现在是 "Hello, World!"
使用 strcat() 拼接字符串(c语言)

strcat()函数原型

char *strcat(char *dest, const char *src);

该函数将src指向的字符串添加到dest指向的字符串的末尾(包括\0结束符),dest字符串的空间必须足够大以容纳两个字符串的合并

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "Hello, ";
    char src[] = "World!";
    strcat(dest, src);
    printf("%s\n", dest); // 输出: Hello, World!
    return 0;
}
使用 strncat() 拼接字符串(c语言)

strncat()函数原型

char *strncat(char *dest, const char *src, size_t n);

该函数将src指向的字符串中最多n个字符添加到dest指向的字符串的末尾,并在最后添加\0结束符。这个函数比strcat()更加安全,因为你可以控制添加到dest的最大字符数量。

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "Hello, ";
    char src[] = "World!";
    strncat(dest, src, 6); // 6 是 "World!" 的长度,包括 '\0'
    printf("%s\n", dest); // 输出: Hello, World!
    return 0;
}

注意

一定要确保dest数组有足够的空间来保存结果字符串,包括结束符\0。如果dest数组的空间不足,这些函数会造成缓冲区溢出,导致未定义行为(通常是程序崩溃或安全漏洞)。因此,在安全的代码中,推荐使用strncat()而不是strcat()。在使用strncat()时,必须清楚地知道目标数组剩余的空间大小,并传入正确的n值参数。
还有一个要注意的点是strncat()的实现方式,n参数表示的是src中最大复制的字符数量,而不是dest剩余空间的大小。换言之,即使传入的n大于src的长度,strncat()仍然会处理到src的’\0’结束符为止。

文章来源:https://blog.csdn.net/weixin_43779276/article/details/135649712
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。