2010-01-25 4 views
0

J'ai grand paragraphe avec des caractères spéciaux en% 1,% 2,% 3C++ modèle de conception pour la recherche et remplacer

Je dois savoir s'il y a un modèle de conception pour remplacer ceux qui ont des valeurs propres et créer finale paragraphe. Par exemple: Voici mon paragraphe statique.

% 1 est beau pays,% 2 est la capitale de% 1,% 1 langue nationale est% 3.

Je reçois les valeurs de% 1,% 2,% 3 par une source.

Répondre

0

vous pouvez nous e strstr ou sscanf pour trouver des pointeurs de chaîne à un semi-modèle (les deux font partie de la bibliothèque c std), cependant, pour remplacer, vous auriez besoin d'élargir le bloc de mémoire pour accueillir les remplacements (si elles sont plus grandes), un regard sur grep (pour unix), ou voir certains des algo de recherche de chaîne, comme Boyer-Moore.

Vous pouvez également jeter un oeil à la google template system ou pegtl

0

Cela dépend vraiment de votre langage de programmation. En C# (.net), vous pouvez utiliser:

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

Le langage est C++ – Avinash

1

Je ne sais pas s'il y a un modèle de conception pour cela, mais il semble que vous voulez incorporer un peu dans votre application templating.

Exemple de templating avec jinja 2:

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

Ou tout simplement recherche et remplacement ...

+0

répondu Q avant que le titre a été changé en "C++ ..."; donc n'hésitez pas à downvote .. – miku

+0

Désolé pour cela, mais je voulais peu clair. – Avinash

1

Ce que vous décrivez est la construction d'un analyseur. Pour quelque chose d'aussi simple que votre problème, vous voudrez probablement garder le design simple et utiliser le mécanisme search-replace pour les chaînes disponibles dans la plupart des langues. Si vous avez besoin de quelque chose de plus puissant (par exemple, pour autoriser "% 1" dans la chaîne finale), je chercherais à utiliser un moteur regex ou CFG, si c'est quelque chose que vous envisagez d'utiliser dans le monde réel, en traitant des cas de bord (tels que %%1%1%%%1%) peut devenir assez complexe.

0

Je n'ai pas compris votre question complètement. Mais je pense que vous pouvez regarder comment fonctionne MessageFormat en Java. Voici un exemple -

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)); 
1

Si cela est C++, vous avez deux choix pour le formatage de chaînes

  1. boost::string algorithms
  2. printf (bien que cela ne fonctionne pas exactement comme vous le souhaitez .)
  3. std::string::replace (peut déraper)
+0

Ou simplement Boosts String Algorithms: http://www.boost.org/doc/libs/1_41_0/doc/html/string_algo/usage.html#id1701549 –

+0

@gf, oui.J'ai vraiment besoin de rafraîchir mon coup de pouce bientôt. Je ne l'ai pas utilisé depuis des années. – Glen

Questions connexes