C字符串,string对象,字符串字面值的区别详解
C字符串
C语言中的字符串是以字符数组的形式存储的,以空字符(\0)结尾。对于一个长度为n的字符串,需要定义一个长度为n+1的字符数组用于存储该字符串。C字符串通常被称为字符数组,其定义形式如下:
char str[] = "Hello, World!"; // 字符串字面值
string
对象
string
是C++中的一个标准类,用于存储字符串。它提供了许多方便的操作方法,比如字符串连接、取子串、比较等。string
类的定义在头文件<string>
中,定义一个string
对象很简单:
#include <string>
std::string str = "Hello, World!"; // 用字符串字面值初始化
std::string str2("Hello, World!", 5); // 用部分 C 字符串初始化
字符串字面值
字符串字面值是指直接在代码中写出来的字符串,它们被编译器嵌入到程序中。字符串字面值可以被用于初始化字符数组或string
对象,也可以被用于输出到标准输出等。字符串字面值的形式是用双引号"
括起来的字符序列,如下:
const char* str = "Hello, World!"; // C字符串
std::string str2 = "Hello, World!"; // string对象
std::cout << "Hello, World!" << std::endl; // 输出到标准输出
区别
- C字符串和字符串字面值都是以字符数组的形式存储的,以空字符(\0)结尾,而
string
对象则是一个类。 - C++中的字符串字面值会自动转换成
string
对象,但C字符串不能直接转换成string
对象,需要用strcpy
等函数实现。 - C字符串和字符串字面值在字符数组定义时需要预留一个位置给'\0',而
string
类则不需要。 string
对象提供了许多方便的操作方法,比如字符串连接、取子串、比较等,而C字符串则需要自己实现这些操作,比较麻烦。
示例1
#include <iostream>
#include <cstring> // C风格字符串函数头文件
int main() {
char cstr[] = "Hello, World!"; // C字符串
// 将C字符串转为C++的string对象
std::string str(cstr);
//输出
std::cout << "C字符串:" << cstr << std::endl;
std::cout << "转换为string对象:" << str << std::endl;
// string对象中操作
str += " I am a developer.";
std::cout << "连接后字符串:" << str << std::endl;
// C字符串中操作
strcpy(cstr, "Welcome, ");
strcat(cstr, "My Friend.");
std::cout << "连接后字符串:" << cstr << std::endl;
return 0;
}
输出结果:
C字符串:Hello, World!
转换为string对象:Hello, World!
连接后字符串:Hello, World! I am a developer.
连接后字符串:Welcome, My Friend.
示例说明:
- 首先使用C字符定义一个C字符串
cstr
,将其转换成string
对象str
。 - 在
string
对象中使用+=
操作符连接字符串,输出连接后结果。 - 在C字符串中使用
strcpy
和strcat
实现字符串的连接,输出连接后结果。
示例2
#include <iostream>
#include <string>
void func(const char* str) { // 函数参数为C字符串
std::string s = str; // C字符串转换为string对象
std::cout << s << std::endl;
}
int main() {
char cstr[] = "Hello, World!";
const char* p = cstr; // C字符串指针
std::string str = "Welcome!";
const char* p2 = str.c_str(); // string对象指针
func(cstr); // 直接传递C字符串
func(p); // 传递C字符串指针
func("Hello!"); // 传递字符串字面值
return 0;
}
输出结果:
Hello, World!
Hello, World!
Hello!
示例说明:
- 定义了一个函数
func
,其参数为C字符串。 - 在
main
函数中,将C字符串定义为字符数组和字符指针两种形式,并将string
对象的C字符串指针存储到p2
中。 - 在
main
函数中,分别使用C字符串、C字符串指针和字符串字面值作为参数调用func
函数。在函数内部,C字符串被直接转换成string
对象并输出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c字符串,string对象,字符串字面值的区别详解 - Python技术站