दूसरे दिन मैंने खुद को ऐसी स्थिति में पाया जहाँ मैं %n
अच्छी तरह से अपनी समस्या को हल करूँगा। मेरे पहले के उत्तर के विपरीत , इस मामले में, मैं एक अच्छा विकल्प तैयार नहीं कर सकता।
मेरे पास एक GUI नियंत्रण है जो कुछ निर्दिष्ट पाठ प्रदर्शित करता है। यह नियंत्रण उस पाठ के भाग को बोल्ड (या इटैलिक, या रेखांकित, आदि) में प्रदर्शित कर सकता है, और चरित्र सूचकांकों को शुरू करने और समाप्त करने के लिए मैं निर्दिष्ट कर सकता हूं कि कौन सा भाग निर्दिष्ट करें।
मेरे मामले में, मैं नियंत्रण के साथ पाठ उत्पन्न कर 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);