如何包含字符文字?

时间:2016-10-18 16:46:43

标签: c++ special-characters

我有一个关于如何在从文件中获取信息时包含字符串文字的问题。让我展示一下我的代码以便更好地理解:

Program.b

print \"Hello World\n\"; print \"Commo Estas :)\n\"; print \"Bonjour\";print \"Something\"; return 0;

main.cpp (我已将实际文件最小化为此问题所需的内容):

int main()
{
    std::string file_contents;
    std::fstream file;
    file.open("Program.b");
    std::ifstream file_read;
    file_read.open("Program.b");

    if(file_read.is_open())
        while(getline(file_read,file_contents));

    cout << file_contents << endl;

}

所以当我打印file_contents时,我得到:

print \"Hello World\n\"; print \"Commo Estas :)\n\"; print \"Bonjour\";print \"Something\"; return 0;

您可以看到它包含\n。有没有办法让它成为一个真正的字符文字,所以打印它实际​​上会打印一个新行? (我希望引号也一样。)

2 个答案:

答案 0 :(得分:6)

尝试这样的事情:

<强> Program.b

R"inp(print "Hello World\n"; print "Commo Estas :)\n"; print "Bonjour";print "Something"; return 0;)inp"

<强>的main.cpp

int main() {
    std::string file contents = 
    #include "Program.b"
    ;
    std::cout << file_contents << std::endl;

}

您还可以更改Program.b以使其更具可读性:

R"inp(
print "Hello World\n"; 
print "Commo Estas :)\n"; 
print "Bonjour";
print "Something"; 
return 0;
)inp"

运行时变体应该只是:

<强> Program.b

print "Hello World\n"; 
print "Commo Estas :)\n"; 
print "Bonjour";
print "Something"; 
return 0;

<强>的main.cpp

int main()
{
    std::string file_contents;
    std::fstream file;
    file.open("Program.b");
    std::ifstream file_read;
    file_read.open("Program.b");

    if(file_read.is_open()) {
        std::string line;
        while(getline(file_read,line)) {
             file_contents += line + `\n`;
        }
    }

    cout << file_contents << endl;

}

答案 1 :(得分:2)

你可以做一个简单的查找+替换。

std::size_t pos = std::string::npos;
while ((pos = file_contents.find("\\n")) != std::string::npos)
    file_contents.replace(pos, 1, "\n");

//Every \n will have been replaced by actual newline character