首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将C++字符串拆分成多行(代码语法,而不是解析)

将C++字符串拆分成多行(代码语法,而不是解析)
EN

Stack Overflow用户
提问于 2010-10-05 05:13:19
回答 3查看 88.8K关注 0票数 80

不要与如何拆分字符串的解析方式相混淆,例如:

Split a string in C++?

对于如何在c++中将字符串拆分成多行,我有点困惑。

这听起来像是一个简单的问题,但以下面的例子为例:

代码语言:javascript
复制
#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()方法,但我想知道是否有更短/更优雅的方法(例如,更像method,尽管c++显然不支持三重引号等),为了可读性,可以将c++中的字符串分成多行。

当你向一个函数(例如一个句子)传递长字符串字面量时,这将是一个特别需要的地方。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-05 05:15:00

不要把任何东西放在字符串之间。C++词法分析阶段的一部分是将相邻的字符串文字(甚至在换行符和注释上)合并为一个文字。

代码语言:javascript
复制
#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;
}

请注意,如果您想在文字中添加一个换行符,则必须自己添加:

代码语言:javascript
复制
#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;
}

如果您想要将#defined整数常量混合到文字中,则必须使用一些宏:

代码语言:javascript
复制
#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的实际值,以将其转换为字符串文字。

票数 133
EN

Stack Overflow用户

发布于 2010-10-05 05:15:04

它们都是字面上的吗?用空格分隔两个字符串文字与连接相同:"abc" "123""abc123"相同。这适用于直接的C语言以及C++。

票数 10
EN

Stack Overflow用户

发布于 2010-10-05 06:38:50

我不知道这是不是在GCC中的一个扩展,或者它是否是标准的,但是看起来你可以通过以反斜杠结束行来继续字符串文字(就像在C++中大多数类型的行都可以被扩展一样,例如一个跨越多行的宏)。

代码语言:javascript
复制
#include <iostream>
#include <string>

int main ()
{
    std::string str = "hello world\
    this seems to work";

    std::cout << str;
    return 0;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3859157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档