На днях я оказался в ситуации, когда %n
бы хорошо решил мою проблему. В отличие от моего более раннего ответа , в этом случае я не могу придумать хорошую альтернативу.
У меня есть элемент управления с графическим интерфейсом, который отображает определенный текст. Этот элемент управления может отображать часть этого текста жирным шрифтом (или курсивом, или подчеркнутым и т. Д.), И я могу указать, какую часть, указав индексы начального и конечного символа.
В моем случае я генерирую текст для snprintf
элемента управления с помощью , и я бы хотел, чтобы одна из замен была выделена жирным шрифтом. Найти начальный и конечный индексы для этой замены нетривиально, потому что:
Строка содержит несколько замен, и одна из замен является произвольным, заданным пользователем текстом. Это означает, что выполнение текстового поиска интересующей меня замены потенциально неоднозначно.
Строка формата может быть локализована и может использовать $
расширение POSIX для описателей позиционного формата. Поэтому поиск в исходной строке формата самих спецификаторов формата нетривиален.
Аспект локализации также означает, что я не могу легко разбить строку формата на несколько вызовов snprintf
.
Поэтому самый простой способ найти индексы вокруг конкретной замены - это сделать:
char buf[256];
int start;
int end;
snprintf(buf, sizeof buf,
"blah blah %s %f yada yada %n%s%n yakety yak",
someUserSpecifiedString,
someFloat,
&start, boldString, &end);
control->set_text(buf);
control->set_bold(start, end);