将C ++string拆分为多行(代码语法,不parsing)
不要混淆如何拆分明智的stringparsing,例如:
在C ++中拆分string?
我有点困惑,如何将一个string拆分成多行c ++。
这听起来像一个简单的问题,但采取下面的例子:
#include <iostream> #include <string> main() { //Gives error std::string my_val ="Hello world, this is an overly long string to have" + " on just one line"; std::cout << "My Val is : " << my_val << std::endl; //Gives error std::string my_val ="Hello world, this is an overly long string to have" & " on just one line"; std::cout << "My Val is : " << my_val << std::endl; }
我意识到我可以使用std::string
append()
方法,但我想知道是否有任何短/更优雅(例如更多python的,但显然三重引号等不支持在c + +)的方式来打破string为了可读性,在c ++中多行。
一个地方,这将是特别可取的是当你传递长string文字到一个函数(例如一个句子)。
不要在琴弦之间放置任何东西。 C ++ lexing阶段的一部分是将相邻的string文字(甚至是换行符和注释)合并为一个单独的文字。
#include <iostream> #include <string> main() { std::string my_val ="Hello world, this is an overly long string to have" " on just one line"; std::cout << "My Val is : " << my_val << std::endl; }
请注意,如果你想在文字中换行,你必须自己添加:
#include <iostream> #include <string> main() { std::string my_val ="This string gets displayed over\n" "two lines when sent to cout."; std::cout << "My Val is : " << my_val << std::endl; }
如果你想把一个#define
d整数常量混合到文字中,你必须使用一些macros:
#include <iostream> using namespace std; #define TWO 2 #define XSTRINGIFY(s) #s #define STRINGIFY(s) XSTRINGIFY(s) int main(int argc, char* argv[]) { std::cout << "abc" // Outputs "abc2DEF" STRINGIFY(TWO) "DEF" << endl; std::cout << "abc" // Outputs "abcTWODEF" XSTRINGIFY(TWO) "DEF" << endl; }
由于string化处理器操作符的工作方式,在那里有一些奇怪的地方,所以你需要两个级别的macros来获取TWO
的实际值作为string文字。
他们都是文字? 用空格分隔两个string文字与拼接相同: "abc" "123"
与"abc123"
相同。 这适用于直C和C ++。
我不知道它是否是GCC的扩展,或者它是标准的,但看起来你可以通过用反斜杠结束来继续string文字(就像大多数types的行可以在C ++中在这个庄园中扩展一样,例如跨越多行的macros)。
#include <iostream> #include <string> int main () { std::string str = "hello world\ this seems to work"; std::cout << str; return 0; }