String.Format для C ++ - PullRequest
       111

String.Format для C ++

27 голосов
/ 20 января 2009

Ищем реализацию для C ++ функции, подобной String.Format .NET. Очевидно, есть printf и его разновидности, но я ищу что-то позиционное, как в:

String.Format ("Привет, {0}. Вы {1} лет Каково это быть {1}? ", Имя, возраст);

Это необходимо, потому что мы попытаемся упростить локализацию нашего приложения, а переводчикам {0} и {1} расположить их в любом месте предложения гораздо проще, чем дать им% s,% d,% d, которые должны быть расположены в том порядке в их переводе.

Я предполагаю, что поиск и замена на переменные входные данные (va_start, va_end и т. Д.) - это то, что я в конечном итоге построю, но если уже есть твердое решение, это было бы предпочтительным.

Спасибо:)

Ответы [ 13 ]

0 голосов
/ 10 ноября 2009

Если вы хотите быть кроссплатформенным, я бы проголосовал за boost :: format или, возможно, ICU. Если вам нужна только Windows, то FormatMessage (или удобная оболочка для этого, CString :: FormatMessage, если вы используете MFC)

Можно посмотреть здесь для сравнения: http://www.mihai -nita.net / article.php? ArtID = 20060430a

0 голосов
/ 23 января 2009

Ориентация на Windows? FormatMessage () твой друг

0 голосов
/ 20 января 2009

Если вы собираетесь писать свои собственные, поиск и замена, вероятно, не самый лучший подход, так как большинство методов поиска / замены позволяют вам заменять только по одному за раз, и очень плохо справляются с разрешенными символами ( например, если вы хотите включить буквальную строку {0} в ваш вывод.

Вам гораздо лучше написать свой собственный конечный автомат для обхода входной строки, генерируя выходную строку на лету за один проход. Это позволяет обрабатывать escape-символы и более сложные выходные функции (например, локализованные даты {0:dd\MM\yyyy}). Это даст вам больше гибкости в дополнение к тому, что вы будете быстрее, чем поиск / замена или подход регулярных выражений.

...