首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在运行时将字符串转换为引用的自身版本?

问如何在运行时将字符串转换为引用的自身版本?
EN

Stack Overflow用户
提问于 2014-08-04 01:39:15
回答 2查看 1.1K关注 0票数 2

假设C++中的标准字符串对象中有转义序列,那么如何在运行时将其转换为引用的自身版本?

代码语言:javascript
复制
std::string str("Foo said, \"bar\"\n");

鉴于以上所述,我希望创建一个新字符串quoted,该字符串具有以下内容:

代码语言:javascript
复制
"\"Foo said, \\\"bar\\\"\\n\""

这只是一个例子。我需要用任意的字符串来执行这个操作。

对于每一个可能的转义序列,我只需要手动完成吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-04 01:50:19

如果您处理的是字符串文本,则可以通过宏传递字符串并对其进行调整。

代码语言:javascript
复制
#define STRINGIFY(X) #X
std::string str(STRINGIFY("Foo said, \"bar\"\n"));

如果您已经存储了一个字符串文本,并且您希望它的一个版本可以作为一个可以在C源代码中使用的字符串来表示相同的字符串,那么您需要对文本应用您自己的字符串化。这有点棘手,因为一些控制字符有自己的转义表示:

代码语言:javascript
复制
std::string hex (int c) {
    std::ostringstream oss;
    oss << std::setw(4) << std::setfill('0') << std::hex << c;
    return oss.str();
}

std::string stringify (const std::string &str) {
    std::ostringstream oss;
    oss << '"';
    for (int i = 0; i < str.size(); ++i) {
        unsigned char c = str[i];
        switch (c) {
        case '\t': oss << "\\t";     break;
        case '\n': oss << "\\n";     break;
        case '\a': oss << "\\a";     break;
        case '\b': oss << "\\b";     break;
        case '\r': oss << "\\r";     break;
        case '\v': oss << "\\v";     break;
        case '\f': oss << "\\f";     break;
        case '"':  oss << "\\\"";    break;
        case '\\': oss << "\\\\";    break;
        default:
            if (std::isprint(c)) oss << c;
            else oss << "\\u" << hex(c);
            break;
        }
    }
    oss << '"';
    return oss.str();
}

如果需要转义'?'以避免三角图,则可能需要扩展此函数。

票数 5
EN

Stack Overflow用户

发布于 2014-08-04 02:01:28

c++14有一个新的std::quoted机械手。

代码语言:javascript
复制
std::cout << quoted(str); // defaults to '"' as the quote and '\\' as the escape

std::ostringstream oss;
oss << quoted(str);
auto quoted_string = oss.str();
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25110724

复制
相关文章

相似问题

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