Delphi / Pascal字符串文字到C / C ++

时间:2011-02-24 19:57:25

标签: c delphi string

我正在尝试编写一个函数来将Delphi / pascal中的字符串文字转换为C等价物。 Delphi中的字符串文字与正则表达式("#"([0-9]{1,5}|"$"[0-9a-fA-F]{1,6})|"'"([^']|'')*"'")+匹配,因此字符串

"This is a test with a tab\ta breakline\nand apostrophe '"

将以Pascal编写为

'This is a test with a tab'#9'a breakline'#$A'and apostrophe '''

我设法删除了撇号,但我无法管理特殊字符。

1 个答案:

答案 0 :(得分:1)

只需使用可在http://www.cppreference.com/wiki/string/basic_string/replace

找到的replaceApp()功能

然后代码看起来像:

string s1 = "This is a test with a tab\\ta breakline\\nand apostrophe '";
string s2 = s1;
s2 = replaceAll(s2, "'", "''");
s2 = replaceAll(s2, "\\t", "'$7'");
s2 = replaceAll(s2, "\\n", "'$10'");
cout << "'" << s2 << "'";

当然更改'\ t' - &gt; '$ 7'可以保存在某些结构中,您可以在循环中使用它,而不是在单独的行中替换每个项目。

编辑:

使用map的第二个解决方案(来自评论的示例):

typedef map <string, string> MapType;
string s3 = "'This is a test with a tab'#9'a breakline'#$A'and apostrophe '''";
string s5 = s3;
MapType replace_map;
replace_map["'#9'"] = "\\t";
replace_map["'#$A'"] = "\\n";
replace_map["''"] = "'";
MapType::const_iterator end = replace_map.end();
for (MapType::const_iterator it = replace_map.begin(); it != end; ++it)
    s5 = replaceAll(s5, it->first, it->second);
cout << "s5 = '" << s5 << "'" << endl;