Geçen gün %n
sorunumu güzelce çözecek bir durumda buldum kendimi . Önceki cevabımın aksine , bu durumda iyi bir alternatif düşünemiyorum.
Belirli bir metni görüntüleyen bir GUI kontrolüm var. Bu kontrol, metnin bir bölümünü kalın (veya italik veya altı çizili vb.) Olarak görüntüleyebilir ve başlangıç ve bitiş karakter indekslerini belirterek hangi bölümü belirtebilirim.
Benim durumumda, ile kontrol için metin snprintf
oluşturuyorum ve ikamelerden birinin kalın yapılmasını istiyorum. Bu ikamenin başlangıç ve bitiş endekslerini bulmak önemsiz değildir çünkü:
Dize birden çok ikame içerir ve ikamelerden biri rastgele, kullanıcı tarafından belirlenmiş metindir. Bu, ilgilendiğim ikame için metinsel bir arama yapmanın potansiyel olarak belirsiz olduğu anlamına gelir.
Biçim dizesi yerelleştirilebilir ve $
konumsal biçim belirleyicileri için POSIX uzantısını kullanabilir . Bu nedenle, orijinal biçim dizesini biçim belirleyicilerin kendileri için aramak önemsiz değildir.
Yerelleştirme yönü aynı zamanda biçim dizesini birden çok çağrıya kolayca bölemeyeceğim anlamına gelir snprintf
.
Bu nedenle, belirli bir ikamenin etrafındaki endeksleri bulmanın en kolay yolu aşağıdakileri yapmak olacaktır:
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);