我正在尝试编写一个函数来将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 '''
我设法删除了撇号,但我无法管理特殊字符。
答案 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;