不要混淆如何拆分字符串解析,例如:
Split a string in C++?
我对如何在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()
方法,但我想知道是否有更短/更优雅(例如更多pythonlike,但显然三重引号等不支持c ++)为了便于阅读,将c ++中的字符串分成多行的方法。
当你将长字符串文字传递给一个函数(例如一个句子)时,一个特别需要的地方就是。
答案 0 :(得分:99)
不要在琴弦之间放任何东西。 C ++ lexing阶段的一部分是将相邻的字符串文字(甚至是换行符和注释)组合成一个文字。
#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整数常量混合到文字中,则必须使用一些宏:
#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;
}
由于stringify处理器操作符的工作方式,因此存在一些奇怪现象,因此您需要两个级别的宏来将TWO
的实际值转换为字符串文字。
答案 1 :(得分:9)
他们都是文字吗?使用空格分隔两个字符串文字与连接相同:"abc" "123"
与"abc123"
相同。这适用于直C和C ++。
答案 2 :(得分:4)
我不知道它是否是GCC中的扩展或者它是否是标准的,但是看起来你可以通过用反斜杠结束行来继续字符串文字(就像在这个庄园中可以扩展大多数类型的行一样)在C ++中,例如跨越多行的宏。)
#include <iostream>
#include <string>
int main ()
{
std::string str = "hello world\
this seems to work";
std::cout << str;
return 0;
}