假设我有一个名为
mv
的字符串:mv =
"hello
new
world "
"hello"、"new"和"world"位于不同的行中。如果我们打印mv
,那么"hello"、"new"和"world"应该分别出现在不同的行中。
我也在考虑竞赛编程方面的问题。如果我将所有查询的答案连接成一个字符串,然后输出答案,或者逐个cout
所有的查询,这两种输出方式会有时间差异吗?
mv
的字符串:mv =
"hello
new
world "
"hello"、"new"和"world"位于不同的行中。如果我们打印mv
,那么"hello"、"new"和"world"应该分别出现在不同的行中。
我也在考虑竞赛编程方面的问题。如果我将所有查询的答案连接成一个字符串,然后输出答案,或者逐个cout
所有的查询,这两种输出方式会有时间差异吗?
std :: string )是什么?
它是一个动态可调整大小的字符数组容器,配备有操作该数组的方法。
字符数组是:characters: |c0|c1|c2|c3|...|cN|
那是std::string
的本质。你对此无能为力。
什么是“行”(的文本)?
C++或任何其他编程语言中均没有“行”的正式定义。“行”是属于阅读和写作在二维空间中排列的文本的视觉概念。一行位于另一行的垂直上方或下方。
计算机不会在二维空间中排列数据。它们将其全部排列在线性、一维存储中。没有数据位于垂直上方或下方。
但是,编程语言可以表示文本行,并且它们都按照相同的约定进行。通常,一行是以新行序列结束的字符数组。
新行序列本身就是一个数组,由一个或两个字符组成,具体取决于操作系统的约定。Windows使用包含两个字符的序列回车符、换行符
。类Unix操作系统使用包含一个字符的序列换行符
。您可以在Wikipedia: Newline 上学习这个主题。但是,为了可移植性,在C++源代码中,无论实际上是什么,换行符序列都用转义序列\n
表示,您可以在源代码中使用它作为字符。
因此,字符数组:
|h|e|l|l|o|\n|
代表了文字行:
hello
在C++中,字符数组:
|h|e|l|l|o|\n|n|e|w|\n|w|o|r|l|d|\n|
表示三行文本:
hello
new
world
如果您想将该数组存储到单个 std::string
中,C++使您可以这样做:
std::string s0{'h','e','l','l','o','\n','n','e','w','\n','w','o','r','l','d','\n'};
更方便的方式如下:std::string s1{"hello\nnew\nworld\n"};
如果你对使用转义序列\n
感到恐惧,甚至可以像这样:
或者 - 如果您对使用转义序列\n
感到害怕 - 可以像这样:
std::string s2
{R"(hello
new
world
)"};
这些将三行文本存储为字符串的方式都会在该字符串中创建完全相同的字符数组,即:
|h|e|l|l|o|\n|n|e|w|\n|w|o|r|l|d|\n|
它们都创建了完全相同的std::string
。
如果您打印这些字符串中的任何一个,您将看到相同的内容,例如:
#include <string>
#include <iostream>
int main() {
std::string s0{'h','e','l','l','o','\n','n','e','w','\n','w','o','r','l','d','\n'};
std::string s1{"hello\nnew\nworld\n"};
std::string s2 // Yes...
{R"(hello
new
world
)"}; // ...it is meant to be formatted like this
std::cout << "--------------" << std::endl;
std::cout << s0;
std::cout << "--------------" << std::endl;
std::cout << s1;
std::cout << "--------------" << std::endl;
std::cout << s2;
std::cout << "--------------" << std::endl;
return 0;
}
输出:
--------------
hello
new
world
--------------
hello
new
world
--------------
hello
new
world
--------------
string mv = "hello\n\
new\n\
world\n";
cout << "Hello \n New \n World" << endl;
这将输出:
Hello
New
World