C++ 中的原始字符串文字及C++ 中的字符串数组(1-2)

简介: 在 C++ 中,为了转义像“\n”这样的字符,我们使用一个额外的“\”。从 C++ 11 开始,我们可以使用未处理转义字符(如 \n \t 或 \” )的原始字符串。原始字符串的语法是文字以 R”( 开头,以 )” 结尾。

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。


C++ 中的原始字符串文字


在 C++ 中,为了转义像“\n”这样的字符,我们使用一个额外的“\”。从 C++ 11 开始,我们可以使用未处理转义字符(如 \n \t 或 \” )的原始字符串。原始字符串的语法是文字以 R”( 开头,以 )” 结尾


让我们看一个在 C++ 中查看原始字符串文字的示例:

// C++ 程序来演示原始字符串的工作。
#include <iostream>
using namespace std;
int main()
{
  // A Normal string
  string string1 = "juejin.\nFor.\njuejiners.\n" ;
  // A Raw string
  string string2 = R"(juejin.\nFor.\njuejiners.\n)";
  cout << string1 << endl;
  cout << string2 << endl;
  return 0;
}
复制代码


输出:

juejin.
For.
juejiners.
juejin.\nFor.\njuejiners.\n
复制代码

C++ 中的字符串数组


在 C 和 C++ 中,字符串是一维字符数组,而 C 中的字符串数组是二维字符数组。声明它们的方法有很多,这里给出了一些有用的方法。


1. 使用指针:


我们实际上通过创建一个指针数组来创建一个字符串文字数组。


C 和 C++ 都支持这一点。

#include <iostream>
int main()
{
  const char *colour[4] = { "Blue", "Red",
              "Orange", "Yellow" };
  for (int i = 0; i < 4; i++)
    std::cout << colour[i] << "\n";
  return 0;
}
复制代码


输出

Blue
Red
Orange
Yellow
复制代码

  • 字符串的数量是固定的,但不是必须的。4 可以省略,编译器将计算正确的大小。

  • 这些字符串是常量,它们的内容不能改变。因为字符串文字(字面意思是带引号的字符串)存在于内存的只读区域中,我们必须在此处指定“const”以防止可能导致程序崩溃的不需要的访问。

2. 使用二维数组:


当所有字符串的长度已知并且需要特定的内存占用时,此方法很有用。字符串的空间将在单个块中分配


这在 C 和 C++ 中都受支持。

#include <iostream>
int main()
{
  // Initialize 2D array
  char colour[4][10] = { "Blue", "Red", "Orange",
            "Yellow" };
  // Printing Strings stored in 2D array
  for (int i = 0; i < 4; i++)
    std::cout << colour[i] << "\n";
  return 0;
}
复制代码


输出

Blue
Red
Orange
Yellow
复制代码

  • 字符串的数量和字符串的大小都是固定的。同样,4 可能会被忽略,并且适当的大小

  • 将由编译器计算。但是,必须给出第二个维度(在本例中为 10),以便编译器可以选择合适的内存布局。

  • 每个字符串都可以修改,但会占用第二维给出的全部空间。每个将在内存中彼此相邻布置,并且不能改变大小。


有时,需要控制内存占用,这将分配具有固定、规则布局的内存区域。



目录
相关文章
|
3月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
101 4
|
2月前
|
缓存 网络协议 API
C/C++ StringToAddress(字符串转 boost::asio::ip::address)
通过上述步骤和示例代码,你可以轻松地在C++项目中实现从字符串到 `boost::asio::ip::address`的转换,从而充分利用Boost.Asio库进行网络编程。
81 0
|
2月前
|
编译器 C语言 C++
C/C++数字与字符串互相转换
C/C++数字与字符串互相转换
|
3月前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
3月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
4月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
47 4
|
3月前
|
存储 C++
C++(五)String 字符串类
本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
|
4月前
|
C++ 索引
C++数组、vector求最大值最小值及其下标
C++数组、vector求最大值最小值及其下标
164 0
|
5月前
|
C++ 索引 运维
开发与运维数组问题之在C++中数组名和指针是等价如何解决
开发与运维数组问题之在C++中数组名和指针是等价如何解决
39 6
|
5月前
|
存储 安全 C++
开发与运维数组问题之声明一个数组如何解决
开发与运维数组问题之声明一个数组如何解决
47 6