搜索和替换的C ++设计模式

时间:2010-01-25 17:25:55

标签: c++ design-patterns

我有一个带有一些特殊字符的大段落,如%1,%2,%3

我需要知道是否有任何设计模式来替换具有适当值的设计模式并创建最终段落。 例如: 以下是我的静态段落。

%1是美丽的国家,%2是%1的首都,%1国家语言是%3。

我得到某些来源的%1,%2,%3的值。

6 个答案:

答案 0 :(得分:1)

我不确定是否有这样的设计模式,但看起来你想在你的应用程序中加入一些模板。

使用jinja 2进行模板化的示例:

>>> from jinja2 import Template
>>> template = Template('{{ country }} is a beautiful country!')
>>> template.render(country='India')
India is a beautiful country.

或者只是搜索和替换 ...

答案 1 :(得分:1)

您所描述的是构建解析器。对于像问题一样简单的事情,您可能希望保持设计简单,并使用大多数语言中可用字符串的搜索替换机制。

如果您需要更强大的功能(例如,在最终字符串中允许“%1”),我会考虑使用regexCFG引擎,如果这是您计划的内容在现实世界中使用,因为处理边缘情况(例如%%1%1%%%1%)会变得非常复杂。

答案 2 :(得分:1)

如果这是C ++,那么你有几个字符串格式选择

  1. boost::string algorithms
  2. printf(虽然这可能与你想要的完全不同。)
  3. std::string::replace(可能会变得混乱)

答案 3 :(得分:0)

这取决于你的编程语言。在C#(。net)中,您可以使用:

var replaced = string.Format("{0} is a {1}", "klausbyskov", "donkey");

答案 4 :(得分:0)

我没有完全回答你的问题。但我认为你可以看看MessageFormat在Java中是如何工作的。这是一个例子 -

 int fileCount = 1273;
 String diskName = "MyDisk";
 Object[] testArgs = {new Long(fileCount), diskName};

 MessageFormat form = new MessageFormat(
     "The disk \"{1}\" contains {0} file(s).");

 System.out.println(form.format(testArgs));

答案 5 :(得分:0)

你可以使用strstrsscanf来查找半模式的字符串指针(两者都是c std库的一部分),但是如何替换,你需要扩展内存块以容纳替换(如果它们更大),看看grep(用于unix),或者查看一些字符串搜索算法,如Boyer-Moore

您还可以查看google template systempegtl