Шаблон C ++ Design для поиска и замены - PullRequest
0 голосов
/ 25 января 2010

У меня большой абзац с некоторыми специальными символами, такими как% 1,% 2,% 3

Мне нужно знать, существует ли какой-либо шаблон проектирования, чтобы заменить их правильными значениями и создать последний абзац. Например: Ниже мой статический параграф.

% 1 - прекрасная страна,% 2 - столица% 1, национальный язык% 1 -% 3.

Я получаю значения% 1,% 2,% 3 от какого-то источника.

Ответы [ 6 ]

1 голос
/ 25 января 2010

Если это C ++, у вас есть несколько вариантов форматирования строки

  1. boost :: string алгоритмы
  2. printf (хотя это может работать не так, как вы хотите.)
  3. std :: string :: replace (может запутаться)
1 голос
/ 25 января 2010

То, что вы описываете, это создание парсера. Для чего-то столь же простого, как ваша проблема, вы, вероятно, захотите сохранить дизайн простым и использовать механизм поиска-замены для строк, доступных в большинстве языков.

Если вам нужно что-то более мощное (например, чтобы разрешить "% 1" в последней строке), я хотел бы рассмотреть использование regex или CFG движка, если это это то, что вы планируете использовать в реальном мире, так как работа с крайними случаями (такими как %%1%1%%%1%) может быть довольно сложной.

1 голос
/ 25 января 2010

Я не уверен, есть ли шаблон проектирования для этого, но похоже, что вы хотите включить некоторые шаблоны в ваше приложение.

Пример шаблонирования с jinja 2 :

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

Или просто поиск и замена ...

0 голосов
/ 26 января 2010

вы можете использовать strstr или sscanf, чтобы найти строковые указатели на полу-шаблон (оба являются частью библиотеки c std), однако для замены вам потребуется расширить блок памяти, чтобы вместить замены (если они больше), посмотрите grep (для unix) или посмотрите некоторые алгоритмы поиска строк, например Boyer-Moore .

Вы также можете взглянуть на систему шаблонов Google или pegtl

0 голосов
/ 25 января 2010

Я не получил ваш вопрос полностью. Но я думаю, что вы можете посмотреть, как 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));
0 голосов
/ 25 января 2010

Это зависит от вашего языка программирования на самом деле. В C # (.net) вы можете использовать:

var replaced = string.Format("{0} is a {1}", "klausbyskov", "donkey");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...