यह एक बहुत ही अस्पष्ट सवाल यह है कि करने के लिए परिवर्तित 0515
को नहीं कहा जाएगा, हालांकि यह विशेष रूप से कठिन नहीं है अगर आप इसके बारे में सोचते हैं। जैसा कि आप कहते हैं, A3
को AAA
के रूप में डीकोड करना और बस इसे जगह में लिखना B
और 1
वर्णों को ओवरराइट करेगा, तो क्यों न केवल उन सरणी के साथ आगे बढ़ें?
उदाहरण के लिए, एक बार जब आप A3
पढ़ चुके हैं, तो आप जानते हैं कि आपको एक अतिरिक्त चरित्र के लिए जगह बनाने की आवश्यकता है, अगर यह A4
था, तो आपको दो की आवश्यकता होगी, और इसी तरह। इसे प्राप्त करने के लिए आपको सरणी में स्ट्रिंग का अंत मिल जाएगा (यह पहले से करें और इसकी अनुक्रमणिका को स्टोर करें)।
फिर पाश हालांकि, अपने नए स्लॉट के लिए पात्रों चलती:
शुरू करने के लिए: A|3|B|1|C|2|||||||
एक चर सूचकांक 5, अर्थात पिछले, गैर खाली, प्रवेश भंडारण end
कहा जाता है।
आप पहली जोड़ी में पढ़ा था, एक चर cursor
बुलाया आपकी वर्तमान स्थिति को स्टोर करने का उपयोग कर - तो A
और 3
यह (3 के साथ स्लॉट) 1 पर सेट किया जाएगा में पढ़ने के बाद। इस कदम के लिए
स्यूडोकोड:
वर एन = सरणी [कर्सर] - 2; // एन = 1, ए 3 से 3, और फिर जोड़ी के लिए अनुमति देने के लिए शून्य 2।
(i = end; i> कर्सर; i ++) { सरणी [i + n] = array [i]; }
इस के साथ छोड़ जाएगा:
A|3|A|3|B|1|C|2|||||
अब A
वहाँ एक बार पहले से ही है, इसलिए अब आप लिखने के लिए n + 1
A
के सूचकांक cursor
में संग्रहीत से शुरू करना चाहते हैं:
for(i = cursor; i < cursor + n + 1; i++)
{
array[i] = array[cursor - 1];
}
// increment the cursor afterwards!
cursor += n + 1;
देने:
A|A|A|A|B|1|C|2|||||
फिर आप फिर से जाने के लिए तैयार मूल्यों की अगली जोड़ी की शुरुआत में इंगित कर रहे हैं। मुझे एहसास है कि इस जवाब में कुछ छेद हैं, हालांकि यह जानबूझकर है क्योंकि यह एक साक्षात्कार सवाल है!उदाहरण के लिए, किनारे के मामलों में आपने A1B1
निर्दिष्ट किया है, आपको आगे के पात्रों को पीछे की ओर पीछे की ओर ले जाने के लिए एक अलग लूप की आवश्यकता होगी।
एक सुझाव यह सरणी के अंत में अपने उत्पादन शुरू करने और पीछे की ओर काम करने के लिए किया जाएगा। – user1118321
कृपया "इन-प्लेस" और भाषा का उपयोग करने के लिए परिभाषित करें। PHP में 'preg_replace_callback' के साथ यह छोटा है, जो "इन-प्लेस" के रूप में है क्योंकि आप उस स्तर के अमूर्त स्तर पर भाषाएं प्राप्त कर सकते हैं। – deceze
जगह-जगह पर, मेरा मतलब आउटपुट लिखने के लिए किसी अन्य सरणी का उपयोग नहीं करना है। अस्थायी चर का उपयोग करना ठीक है। भाषा सी/सी ++ होगी। @ user1118321: यह काम नहीं करेगा क्योंकि आप अभी भी मूल एन्कोडेड स्ट्रिंग के मानों को ओवर-राइट कर सकते हैं। उदाहरण: "ए 1 बी 1"। अंतिम स्थिति में 'ए' लिखना 'बी' के बगल में '1' ओवर-राइट करेगा। – Bugaboo