स्ट्रिंग (कंप्यूटर विज्ञान)

कंप्यूटर प्रोग्रामिंग में, स्ट्रिंग पारंपरिक रूप से वर्णों का एक अनुक्रम है जो शाब्दिक स्थिरांक या किसी प्रकार के चर के रूप में निर्धारित डेटा को उत्परिवर्तित करने या लंबाई मे परिवर्तन की स्वीकृति दे सकती है प्रायः इसे प्रोग्राम के बाद निश्चित किया जा सकता है। एक स्ट्रिंग को सामान्यतः डेटा प्रकार के रूप में माना जाता है और इसे प्रायः बाइट्स या शब्दों की सूची डेटा संरचना के रूप में कार्यान्वित किया जाता है इसमे कुछ वर्ण संकेतीकरण का उपयोग करके डेटा के अनुक्रम को संग्रहीत करते है सामान्यतः वर्ण स्ट्रिंग अधिक सामान्य तालिका या अन्य अनुक्रम सूची से डेटा प्रकारों और संरचनाओं को भी निरूपित कर सकते हैं।

प्रोग्रामिंग भाषा और अपेक्षाकृत डेटा प्रकार के आधार पर एक स्ट्रिंग के रूप में घोषित चर का उपयोग या तो मेमोरी में भंडारण को पूर्व निर्धारित अधिकतम लंबाई के लिए स्थिर रूप से आवंटित किया जा सकता है या गतिशील भंडारण को नियोजित करने के लिए इसे डेटा की एक चर संख्या स्थित करने स्वीकृति होती है।

जब एक स्ट्रिंग शाब्दिक रूप से स्रोत कोड में प्रदर्शित होती है, तो इसे एक स्ट्रिंग शाब्दिक या अस्पष्ट स्ट्रिंग के रूप में जाना जाता है। औपचारिक भाषाओ में जिनका उपयोग गणितीय तर्क और सैद्धांतिक कंप्यूटर विज्ञान में किया जाता है वह स्ट्रिंग प्रतीकों का एक परिमित अनुक्रम होता है जिसे वर्णमाला नामक एक समुच्चय से चयनित किया जाता है।



इतिहास
"स्ट्रिंग" शब्द का प्रयोग "एक निश्चित अनुक्रम में प्रतीकों या भाषा के डेटा का एक अनुक्रम" गणितय प्रतीकात्मक तर्क और भाषा सिद्धांत से विकसित हुआ है जो प्रतीकात्मक प्रणालियों के औपचारिक सिद्धान्त का अनुसरण करता है और प्रतीकों के अर्थ को अलग करता है।

उदाहरण के लिए, तर्कशास्त्री सी. आई. लुईस ने 1918 में लिखा था कि एक गणितीय प्रणाली पहचानने योग्य चिह्नों के स्ट्रिंग का कोई समूह है जिसमें कुछ स्ट्रिंग को प्रारंभ में लिया जाता है और शेष इन नियमों के अनुसार किए गए संचालन से प्राप्त होते हैं जो अंकों को निर्दिष्ट किसी भी अर्थ से स्वतंत्र होते हैं। ध्वनि के अतिरिक्त एक प्रणाली में 'संकेत चिह्न' होता है।

जीन ई. सैममेट के अनुसार, कंप्यूटर के लिए "पहली यथार्थवादी स्ट्रिंग प्रबंधन और प्रतिदर्श अनुरूप भाषा" 1950 के दशक में कॉमिट भाषा थी जिसके बाद 1960 के दशक के प्रारम्भ में स्नोबॉल भाषा थी।

स्ट्रिंग डेटाटाइप
स्ट्रिंग डेटाटाइप एक औपचारिक स्ट्रिंग के अनुसार बनाया गया डेटाटाइप है। स्ट्रिंग्स इतने महत्वपूर्ण और उपयोगी डेटाटाइप हैं कि उन्हें लगभग सभी प्रोग्रामिंग भाषा में उपयोग किया जाता है। कुछ भाषाओं में वे मूल-डेटाटाइप के रूप में और अन्य में मिश्रित प्रकार के डेटाटाइप के रूप में उपलब्ध होते हैं। अधिकांश उच्च-स्तरीय प्रोग्रामिंग भाषाओं का एल्गोरिथम एक स्ट्रिंग के लिए डेटा स्वीकृति प्रदान करता है सामान्यतः स्ट्रिंग डेटाटाइप के उदाहरण का प्रतिनिधित्व करने के लिए प्रस्तुत किया जाता है, इस प्रकार के मेटा-स्ट्रिंग को शाब्दिक या स्ट्रिंग-शाब्दिक कहा जाता है।

स्ट्रिंग लंबाई
हालांकि औपचारिक स्ट्रिंग्स की अपेक्षाकृत परिमित लंबाई हो सकती है वास्तविक भाषाओं में स्ट्रिंग्स की लंबाई प्रायः एक कृत्रिम रूप से अधिकतम सीमित होती है। सामान्यतः दो प्रकार के स्ट्रिंग डेटाटाइप होते हैं: निश्चित-लंबाई वाली स्ट्रिंग, जिनकी एक निश्चित अधिकतम लंबाई होती है, जिसे रन-टाइम पर निर्धारित किया जाता है और जो समान स्थिति में भंडारण का उपयोग करते हैं इसे अधिकतम भंडारण की आवश्यकता हो या न हो लेकिन निश्चित-लंबाई वाली स्ट्रिंग जिसकी लंबाई अपेक्षाकृत रूप से सीमित होती है और जो रन-टाइम पर वास्तविक आवश्यकताओं के आधार पर अलग-अलग स्थिति में मेमोरी का उपयोग कर सकता है आधुनिक प्रोग्रामिंग भाषाओ में अधिकांश स्ट्रिंग चर-लंबाई स्ट्रिंग होती हैं। जिसके परिणाम स्वरूप चर-लंबाई की स्ट्रिंग भी लंबाई में सीमित होती हैं उपलब्ध कंप्यूटर मेमोरी के आकार से स्ट्रिंग की लंबाई को एक अलग पूर्णांक के रूप में संग्रहीत किया जा सकता है जो लंबाई पर एक और कृत्रिम सीमा को निर्धारित कर सकता है या अंत में एक अंतिम वर्ण के माध्यम से, सामान्यतः सभी बिट्स शून्य के साथ एक वर्ण मान जैसे सी प्रोग्रामिंग भाषा में स्ट्रिंग के रूप मे सम्मिलित होते है।

वर्ण संकेतीकरण
स्ट्रिंग डेटाटाइप्स ने ऐतिहासिक रूप से एक बाइट प्रति वर्ण आवंटित किया है हालांकि वर्ण समूह क्षेत्र के अनुसार वर्ण संकेतीकरण पर्याप्त रूप से भिन्न होता है जिससे प्रोग्रामर प्रायः इसे अस्वीकृत कर सकते है क्योंकि वर्णों को विशेष रूप से क्रियान्वित किया जाता है जैसे कि समय और स्थान सभी संकेतीकरण को एक ही स्थान पर एक प्रोग्राम का सामना करना पड़ता है ये वर्ण समूह सामान्यतः सूचना परिवर्तन के लिए अमेरिकन मानक कोड (एएससीआईआई) या इबीसीडीआईसी पर आधारित थे। यदि एक संकेतीकरण में टेक्स्ट एक अलग संकेतीकरण का उपयोग कर सिस्टम पर प्रदर्शित किया गया था तो टेक्स्ट प्रायः खंडित होता था हालांकि प्रायः कुछ पढ़ने योग्य होता था और कुछ कंप्यूटर उपयोगकर्ता क्षतिग्रस्त टेक्स्ट को पढ़ना सीखते है।

चीनी भाषा, जापानी भाषा (सामूहिक रूप से सीजेके वर्ण के रूप में जाना जाता है) जैसी तार्किक भाषाओं को उपयुक्त प्रतिनिधित्व के लिए 256 से अधिक वर्णों (8-बिट बाइट प्रति-वर्ण संकेतीकरण की सीमा) की आवश्यकता होती है। सामान्य समाधान में एएससीआईआई के लिए एकल-बाइट प्रस्तुतियों को सम्मिलित करना और सीजेके विचारधाराओं के लिए दो-बाइट प्रस्तुतियों का उपयोग करना सम्मिलित होता है। सम्मिलित कोड के साथ इनका उपयोग करने से स्ट्रिंग्स के अनुरूप और विभिन्न समस्याएँ उत्पन्न होती है जिसकी गंभीरता इस विषय पर निर्भर करती है कि वर्ण संकेतीकरण को कैसे डिज़ाइन किया गाया है। ईयूसी समूह जैसे कुछ संकेतीकरण दायित्व करते हैं कि एएससीआईआई श्रेणी में एक बाइट मान केवल उस एएससीआईआई वर्ण का प्रतिनिधित्व करता है जो उन वर्णों को क्षेत्र विभाजक के रूप में उपयोग करने वाले सिस्टम के लिए संकेतीकरण को सुरक्षित बनाता है। अन्य संकेतीकरण जैसे आईएसओ-2022 और शिफ्ट-जेआईएस का दायित्व नहीं करते हैं जिससे बाइट कोड असुरक्षित हो जाता है। ये संकेतीकरण "तुल्यकालन संकेत" भी होते है जिससे एक स्ट्रिंग को प्रारम्भिक बैकअप प्राप्त करने के लिए वर्ण सीमाओं का पता लगाने की आवश्यकता होती है और दो स्ट्रिंग्स को एक साथ संबद्ध दूसरी स्ट्रिंग का दुरूपयोग हो सकता है। यूनीकोड ने छवि को कुछ प्रकार तक सरल बना दिया है। जिससे अधिकांश प्रोग्रामिंग भाषाओं में अब यूनिकोड स्ट्रिंग्स के लिए एक डेटाटाइप होता है। यूनिकोड का अपेक्षाकृत बाइट स्ट्रीम प्रारूप यूटीएफ-8 पुराने मल्टीबाइट संकेतीकरण के लिए ऊपर वर्णित समस्याओं से बचने के लिए डिज़ाइन किया गया है। यूटीएफ-8, यूटीएफ-16 और यूटीएफ-32 के लिए प्रोग्रामर को यह जानने की आवश्यकता होती है कि निश्चित आकार की कोड इकाइयाँ "वर्णों" से भिन्न होती हैं वर्तमान में मुख्य समस्या गलत तरीके से डिज़ाइन किए गए एपीआई के कारण हैं जो यूटीएफ-32 का उपयोग करते हैं यूटीएफ-32 निश्चित आकार के कोड बिंदु बनाता है लेकिन ये कोड लिखने के कारण "अक्षर" नहीं होते हैं

कार्यान्वयन
कुछ प्रोग्रामिंग भाषाएं, जैसे कि सी ++, पर्ल और रूबी सामान्यतः एक स्ट्रिंग डेटा को परिवर्तित करने के बाद भी इसे परिवर्तन की स्वीकृति देते हैं प्रायः इन्हें उत्परिवर्तित स्ट्रिंग कहा जाता है। अन्य भाषाओं में, जैसे कि जावा, जावास्क्रिप्ट, लुआ (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग भाषा) और गो (प्रोग्रामिंग भाषा) के लिए स्ट्रिंग डेटा को निर्धारित किया गया है और यदि कोई परिवर्तन होता है तो इन्हें अपरिवर्तनीय स्ट्रिंग कहा जाता है। अपरिवर्तनीय स्ट्रिंग वाली इन भाषाओं में से कुछ अन्य प्रकार के स्ट्रिंग डेटा होते हैं जो कि उत्परिवर्तनीय होते है जैसे कि जावा और डाट नेट फ्रेमवर्क, स्ट्रिंग जावा और कोको (एपीआई)   दोनों स्ट्रिंग डेटा के लिए अपरिवर्तनीय होते हैं हालांकि अपरिवर्तनीय स्ट्रिंग डेटा को अक्षम रूप से कई प्रतियों का निर्माण करने की आवश्यकता हो सकती है वे सरल और पूर्ण रूप से थ्रेड सुरक्षा का प्रयोग करते हैं। स्ट्रिंग्स को सामान्यतः बाइट्स, वर्ण या कोड यूनिट्स की सरणियों के रूप में प्रयुक्त किया जाता है, ताकि अलग-अलग यूनिट्स या सबस्ट्रिंग्स तक शीघ्रता से अभिगम्य की स्वीकृति दी जा सके और जिसमें एक निश्चित लंबाई होने पर वर्ण भी सम्मिलित होते हैं। इसके अतिरिक्त हास्केल (प्रोग्रामिंग भाषा) जैसी कुछ भाषाएं उन्हें निश्चित सूचियों के रूप में प्रयुक्त करती हैं।

कुछ भाषाएँ, जैसे कि प्रोलॉग और एर्लंग (प्रोग्रामिंग भाषा) एक समर्पित स्ट्रिंग डेटाटाइप को प्रयुक्त करने से सुरक्षित होती हैं इसके अतिरिक्त वर्ण कोड की सूची के रूप में स्ट्रिंग्स का प्रतिनिधित्व करने के लिए स्ट्रिंग डेटा को स्वीकृत करती हैं।

अभिवेदन
स्ट्रिंग्स का निरूपण वर्ण प्रदर्शनों की सूची और वर्ण संकेतीकरण की विधि पर बहुत अधिक निर्भर करता है। पुराने स्ट्रिंग कार्यान्वयन को एएससीआईआई द्वारा परिभाषित प्रदर्शनों की सूची और संकेतीकरण या आईएसओ 8859 श्रृंखला जैसे अधिक वर्तमान के विस्तारण के साथ कार्य करने के लिए डिज़ाइन किया गया था। आधुनिक कार्यान्वयन प्रायः यूटीएफ -8 और यूटीएफ -16 जैसे विभिन्न जटिल संकेतीकरण के साथ यूनिकोड द्वारा परिभाषित व्यापक प्रदर्शन का उपयोग करते हैं।

शब्द बाइट स्ट्रिंग सामान्यतः केवल (टेक्स्ट) वर्णों, बिट्स के स्ट्रिंग या इस प्रकार के स्ट्रिंगों के अतिरिक्त बाइट्स की एक सामान्य-उद्देश्य स्ट्रिंग को इंगित करता है। जिस बाइट स्ट्रिंग्स का अर्थ प्रायः यह होता है कि बाइट का कोई भी मान ले सकते हैं और किसी भी डेटा को यथा-रूप में संग्रहीत किया जा सकता है जिसका अर्थ है कि अंतिम मान के रूप में कोई मान नहीं समझा जाना चाहिए। अधिकांश स्ट्रिंग कार्यान्वयन चर-लंबाई सरणियों के समान होती हैं जिसमें संबंधित वर्णों के वर्ण कोड को संग्रहीत करने वाली विभिन्न प्रविष्टियाँ होती हैं। मुख्य अंतर यह है कि कुछ संकेतीकरण के साथ एक तार्किक वर्ण सरणी में एक से अधिक प्रविष्टियां हो सकती है। उदाहरण के लिए यह यूटीएफ-8 के साथ होता है जहां एकल कोड (यूसीएस कोड बिंदु) एक से चार बाइट तक स्ट्रिंग डेटा को कहीं भी ले जा सकते हैं और एकल वर्ण कोड की अपेक्षाकृत संख्या परिवर्तित कर सकते हैं। इन स्थितियों में, स्ट्रिंग की तार्किक लंबाई (वर्णों की संख्या) सरणी की भौतिक लंबाई (उपयोग में बाइट्स की संख्या) से भिन्न होती है। जो यूटीएफ-32 समस्या के पहले भाग से सुरक्षित करता है।

रिक्त टर्मिनेट
एक विशेष टर्मिनेट वर्ण का उपयोग करके एक स्ट्रिंग की लंबाई को निहित रूप से संग्रहीत किया जा सकता है प्रायः यह रिक्त वर्ण (एनयूएल) होता है जिसमें सभी बिट्स शून्य होते हैं सी (प्रोग्रामिंग भाषा) द्वारा उपयोग की जाने वाली एक स्ट्रिंग होती है। इसलिए, इस प्रतिनिधित्व को सामान्यतः सी स्ट्रिंग के रूप में जाना जाता है n -वर्ण स्ट्रिंग का यह प्रतिनिधित्व n + 1 स्पेस टर्मिनेटर के लिए 1 को स्वीकृत करता है और इस प्रकार एक अंतर्निहित डेटा संरचना होती है। टर्मिनेटेड स्ट्रिंग्स में, टर्मिनेटिंग कोड किसी भी स्ट्रिंग में स्वीकार्य वर्ण नहीं है। लंबाई क्षेत्र वाले स्ट्रिंग्स में यह सीमा नहीं होती है और यह अपेक्षाकृत बाइनरी डेटा भी संग्रहीत कर सकती है।

10-बाइट बफर (कंप्यूटर विज्ञान) में संग्रहीत एक रिक्त-टर्मिनेटेड स्ट्रिंग का एक उदाहरण, इसके एएससीआईआई या अधिक आधुनिक यूटीएफ-8 के प्रतिनिधित्व के साथ 8-बिट हेक्साडेसिमल संख्या होती है:

उपरोक्त उदाहरण में स्ट्रिंग की लंबाई  5 वर्ण हैं, लेकिन यह 6 बाइट्स तक विस्तृत होता है। टर्मिनेटर के बाद के वर्ण प्रतिनिधित्व के भाग नहीं बनते हैं वे या तो अन्य डेटा का भाग हो सकते हैं या केवल अशपष्ट हो सकते हैं। इस प्रकार के स्ट्रिंग्स को कभी-कभी एएससीआईजेड स्ट्रिंग्स कहा जाता है, मूल असेंबली भाषा दिशासूचक के बाद उन्हें घोषित करने के लिए उपयोग किया जाता है।

बाइट और बिट-टर्मिनेट
स्ट्रिंग्स को समाप्त करने के लिए रिक्त के अतिरिक्त एक विशेष बाइट का उपयोग करना ऐतिहासिक रूप से हार्डवेयर और सॉफ्टवेयर दोनों में प्रयुक्त किया जाता है, हालांकि कभी-कभी एक मान के साथ जो एक स्थित वर्ण था।  का उपयोग कई असेंबलर सिस्टम द्वारा किया गया था और  का सीडीसी सिस्टम द्वारा उपयोग किया गया था इस वर्ण का मान शून्य था और जेडएक्स80 ने  का उपयोग किया क्योंकि यह अपनी बेसिक भाषा में स्ट्रिंग सीमांकक था।

कुछ समान, आईबीएम 1401 जैसी "डेटा प्रोसेसिंग" मशीनें बाईं ओर स्ट्रिंग्स को परिसीमित करने के लिए एक विशेष शब्द चिह्न बिट का उपयोग करती हैं, जहां संचालन दाईं ओर से प्रारम्भ होता है इस बिट को स्ट्रिंग के अन्य सभी भागों में स्पष्ट होना चाहिए। इसका अर्थ यह था कि, जबकि आईबीएम 1401 में सात-बिट शब्द था लगभग किसी ने कभी भी इसे एक विशेषता के रूप में उपयोग करने के विषय में नहीं सोचा था और एएससीआईआई कोड को सुरक्षित करने के लिए सातवें बिट के असाइनमेंट को ओवरराइड कर दिया था।

प्रारंभिक माइक्रो कंप्यूटर सॉफ़्टवेयर ने इस तथ्य पर विश्वास किया कि एएससीआईआई कोड उच्च-क्रम बिट का उपयोग नहीं करते हैं और इसे एक स्ट्रिंग के अंत को इंगित करने के लिए प्रयुक्त करते हैं। इसे आउटपुट से पहले 0 पर रीसेट किया जाना आवश्यक होता है।

लंबाई-पूर्व-निर्धारित
एक स्ट्रिंग की लंबाई भी स्पष्ट रूप से संग्रहीत की जा सकती है, उदाहरण के लिए स्ट्रिंग को बाइट मान के रूप में लंबाई के साथ निर्धारित करके इस अधिवेशन का प्रयोग कई पास्कल (प्रोग्रामिंग भाषा) में किया जाता है जिसके परिणामस्वरूप, कुछ लोग ऐसी स्ट्रिंग को पास्कल स्ट्रिंग या पी-स्ट्रिंग कहते हैं। स्ट्रिंग लंबाई को बाइट के रूप में संग्रहीत करने से अधिकतम स्ट्रिंग लंबाई 255 तक सीमित हो जाती है। ऐसी सीमाओं से बचने के लिए, पी-स्ट्रिंग्स के अपेक्षाकृत कार्यान्वयन स्ट्रिंग लंबाई के भंडारण करने के लिए 16-बिट, 32-बिट या 64-बिट शब्दों का उपयोग करते हैं। जब लंबाई क्षेत्र एड्रेस को नियंत्रित करता है, तब स्ट्रिंग केवल उपलब्ध भंडारण द्वारा सीमित होते हैं।

यदि लंबाई सीमित होती है, तो इसे निरंतर स्थान में एन्कोड किया जा सकता है सामान्यतः एक मशीन शब्द को इस प्रकार n + k स्थान के रूप मे प्राप्त करती है और एक अंतर्निहित डेटा संरचना की ओर प्रेरित करती है, जहाँ k एक शब्द में वर्णों की संख्या है 8-बिट के लिए 8 और 64-बिट मशीन पर एएससीआईआई, 32-बिट मशीन पर 32-बिट यूटीएफ-32/यूसीएस-4 के लिए 1 होती है यदि लंबाई सीमित नहीं होती है, तो लंबाई n संकेतीकरण log(n) + n) स्थान ग्रहण करती है (निश्चित-लंबाई कोड देखें), इसलिए लंबाई-निर्धारण स्ट्रिंग एक संक्षिप्त डेटा संरचना है जो log(n) + n) क्षेत्र में लंबाई n की स्ट्रिंग को एन्कोड करती है। बाद की स्थिति में, लंबाई-निर्धारण क्षेत्र में निश्चित लंबाई नहीं होती है, इसलिए स्ट्रिंग बढ़ने पर वास्तविक स्ट्रिंग डेटा को स्थानांतरित करने की आवश्यकता होती है, जिससे लंबाई क्षेत्र को विस्तृत की आवश्यकता होती है।

यहां पास्कल स्ट्रिंग को 10-बाइट बफर में एएससीआईआई/यूटीएफ-8 प्रतिनिधित्व के साथ संग्रहीत किया गया है:

स्ट्रिंग रिकॉर्ड
वस्तु उन्मुख प्रोग्रामिंग सहित कई भाषाएं, आंतरिक संरचना वाले रिकॉर्ड के रूप में स्ट्रिंग्स को प्रयुक्त करती हैं जैसे: class string { size_t length; char *text; }; हालाँकि, कार्यान्वयन सामान्यतः छिपा हुआ है, स्ट्रिंग के सदस्य कार्यों के माध्यम से एक्सेस और संशोधित किया जाता है टेक्स्ट गतिशील रूप से आवंटित भंडारण क्षेत्र के लिए एक सूचक है जिसे आवश्यकतानुसार विस्तारित किया जा सकता है। जिसके लिए स्ट्रिंग (सी ++) देखें।

अन्य अभिवेदन
वर्ण समाप्ति और लंबाई कोड दोनों ही स्ट्रिंग्स को सीमित करते हैं उदाहरण के लिए, सी वर्ण सूची जिनमें रिक्त (एनयूएल) वर्ण होते हैं, सी स्ट्रिंग लाइब्रेरी फ़ंक्शंस द्वारा प्रत्यक्ष रूप से प्रयुक्त नहीं जा सकता है लंबाई कोड का उपयोग करने वाले स्ट्रिंग लंबाई कोड के अधिकतम मान तक सीमित होते हैं। क्लेवर प्रोग्रामिंग द्वारा इन दोनों सीमाओं को दूर किया जा सकता है।

डेटा संरचनाओं और कार्यों को बनाना संभव है जो उन्हें संरक्षित करते हैं जिनमें वर्ण समाप्ति से जुड़ी समस्याएं नहीं होती हैं और सिद्धांतिक रूप में लंबाई कोड सीमा को निर्धारित कर सकते हैं। संकलन-लंबाई संकेतीकरण (वर्ण मान और लंबाई द्वारा दोहराए गए वर्णों का परिवर्तन) और हैमिंग कोडिंग से तकनीकों का उपयोग करके प्रस्तुत स्ट्रिंग को अनुकूलित करना भी संभव होता है। जबकि ये अभिवेदन सामान्य हैं या अन्य संभव हैं। रोप्स का उपयोग कुछ स्ट्रिंग संचालन, जैसे कारक, विलोपन और संघटन को अधिक कुशल बनाता है।

टेक्स्ट संपादक में मूल डेटा संरचना वह है जो स्ट्रिंग (वर्णों के अनुक्रम) का प्रबंधन करती है जो संपादित की जा रही फ़ाइल की वर्तमान स्थिति का प्रतिनिधित्व करती है। जबकि उस स्थिति को वर्णों की एक लंबी निरंतर सरणी में संग्रहीत किया जा सकता है इसके अतिरिक्त एक विशिष्ट टेक्स्ट संपादक इसके अनुक्रम डेटा संरचना के रूप में एक वैकल्पिक प्रतिनिधित्व का उपयोग करता है एक अंतर बफर लाइनों की एक संबद्ध सूची, एक भाग तालिका या एक रोप्स बनाती है कुछ स्ट्रिंग संचालन, जैसे कारक, विलोपन और पिछले संपादनों को पूर्ववत अधिक कुशल बनती है।

सुरक्षा संबंध
अलग-अलग मेमोरी लेआउट और स्ट्रिंग्स के भंडारण की आवश्यकताएं स्ट्रिंग डेटा तक अभिगम्य वाले प्रोग्राम की सुरक्षा को प्रभावित कर सकती हैं। एक अंतिम वर्ण की आवश्यकता वाले स्ट्रिंग अभिवेदन सामान्यतः बफ़र अति प्रसारण समस्याओं के लिए संवेदनशील होते हैं यदि समाप्ति वर्ण सम्मिलित नहीं होते है जो एक कोडिंग त्रुटि या एक आक्रमण द्वारा निर्धारित डेटा परिवर्तन का कारण होता है। यदि लंबाई में परिवर्तन किया जा सकता है तो एक अलग लंबाई क्षेत्र को अपनाने वाले स्ट्रिंग अभिवेदन भी अतिसंवेदनशील होते हैं। ऐसी स्थितियों में, स्ट्रिंग डेटा तक अभिगम्य वाले प्रोग्राम कोड को यह सुनिश्चित करने के लिए सीमा परीक्षण की आवश्यकता होती है कि यह स्ट्रिंग मेमोरी सीमा के बाहर डेटा का कोई भी नियंत्रण या परिवर्तित नहीं करता है।

उपयोगकर्ता के इनपुट से प्रोग्राम में स्ट्रिंग डेटा प्रायः प्राप्त किया जाता है। जैसे यह सुनिश्चित करने के लिए स्ट्रिंग को स्वीकृत करने के लिए एक कार्यक्रम उत्तरदायी होता है जो इस अपेक्षित प्रारूप का प्रतिनिधित्व करता है। उपयोगकर्ता इनपुट का सीमित या कोई सत्यापन नहीं करने से प्रोग्राम कोड अंतःक्षेपण आक्रमण के प्रति संवेदनशील हो सकता है।

शाब्दिक स्ट्रिंग्स
कभी-कभी, स्ट्रिंग्स को एक टेक्स्ट फ़ाइल के अंदर अंतर्निहित करने की आवश्यकता होती है जो मानव-टेक्स्ट और मशीन द्वारा व्यय के लिए घोषित है। उदाहरण के लिए, प्रोग्रामिंग भाषाओं के स्रोत कोड या कॉन्फ़िगरेशन फ़ाइलों में इसकी आवश्यकता होती है। इस स्थिति में, एनयूएल वर्ण टर्मिनेटर के रूप में अपेक्षाकृत रूप से कार्य नहीं करता है क्योंकि यह सामान्य रूप से अदृश्य या गैर-प्रिंट करने योग्य होता है और कीबोर्ड के माध्यम से इनपुट करना जटिल होता है। स्ट्रिंग की लंबाई को संग्रहीत करना भी असुविधाजनक होता है क्योंकि मैन्युअल गणना लंबाई की नियंत्रण और त्रुटि-प्रवण होती है।

इसके दो सामान्य अभिवेदन होते हैं:
 * अधिकांश प्रोग्रामिंग भाषाओं द्वारा उपयोग किए जाने वाले सांकेतिक चिह्नों (एएससीआईआई 0x22 दोहरे संकेत  ​​या एएससीआईआई 0x27 एकल संकेत   से घिरा हुआ होता है। विशेष वर्णों को सम्मिलित करने में सक्षम होने के लिए जैसे सांकेतिक चिह्न स्वयं, न्यूलाइन वर्ण या गैर-प्रिंट करने योग्य वर्ण, बचने के क्रम प्रायः उपलब्ध होते हैं, सामान्यतः बैकस्लैश वर्ण (एएससीआईआई 0x5C) के साथ पूर्व निर्धारित किया जाता है।
 * विंडोज आईएनआई फ़ाइलों में उदाहरण के लिए, एक 'न्यूलाइन' अनुक्रम द्वारा समाप्त किया जाता है।

गैर-पाठ तार
जबकि कैरेक्टर स्ट्रिंग्स स्ट्रिंग्स के बहुत सामान्य उपयोग हैं, कंप्यूटर विज्ञान में एक स्ट्रिंग समान रूप से टाइप किए गए डेटा के किसी भी अनुक्रम को सामान्य रूप से संदर्भित कर सकती है। एक बिट स्ट्रिंग या बाइट स्ट्रिंग, उदाहरण के लिए, संचार माध्यम से प्राप्त गैर-पाठ्य बाइनरी डेटा का प्रतिनिधित्व करने के लिए उपयोग किया जा सकता है। यह डेटा स्ट्रिंग-विशिष्ट डेटाटाइप द्वारा प्रस्तुत किया जा सकता है या नहीं, यह एप्लिकेशन की ज़रूरतों, प्रोग्रामर की इच्छा और प्रोग्रामिंग भाषा की क्षमताओं के आधार पर उपयोग किया जा रहा है। यदि प्रोग्रामिंग भाषा का स्ट्रिंग कार्यान्वयन 8-बिट साफ नहीं है, तो डेटा दूषित हो सकता है।

सी प्रोग्रामर एक "स्ट्रिंग", उर्फ ​​"वर्णों की स्ट्रिंग" के बीच एक तेज अंतर बनाते हैं, जो परिभाषा के अनुसार हमेशा शून्य समाप्त होता है, बनाम एक "बाइट स्ट्रिंग" या "छद्म स्ट्रिंग" जो एक ही सरणी में संग्रहीत हो सकता है लेकिन है प्रायः शून्य समाप्त नहीं होता। ऐसे "बाइट स्ट्रिंग" पर सी स्ट्रिंग हैंडलिंग फ़ंक्शंस का उपयोग करना प्रायः काम करता प्रतीत होता है, लेकिन बाद में सुरक्षा समस्याओं का कारण बनता है

स्ट्रिंग प्रोसेसिंग एल्गोरिदम
स्ट्रिंग्स को संसाधित करने के लिए कई एल्गोरिदम हैं, जिनमें से प्रत्येक में विभिन्न ट्रेड-ऑफ हैं। प्रतिस्पर्धी एल्गोरिदम का विश्लेषण रन टाइम, स्टोरेज आवश्यकताओं आदि के संबंध में किया जा सकता है। स्ट्रिंग प्रोसेसिंग के लिए उपयोग किए जाने वाले एल्गोरिदम और डेटा संरचनाओं के सिद्धांत के लिए कंप्यूटर वैज्ञानिक ज़्वी गैलिल द्वारा 1984 में स्ट्रिंगोलॉजी नाम दिया गया था।

एल्गोरिदम की कुछ श्रेणियों में सम्मिलित हैं:
 * किसी दिए गए सबस्ट्रिंग या पैटर्न को खोजने के लिए स्ट्रिंग खोज एल्गोरिथ्म
 * स्ट्रिंग हेरफेर एल्गोरिदम
 * छँटाई एल्गोरिथ्म
 * नियमित अभिव्यक्ति एल्गोरिदम
 * पार्सर एक स्ट्रिंग
 * अनुक्रम खनन

उन्नत स्ट्रिंग एल्गोरिदम प्रायः जटिल तंत्र और डेटा संरचनाओं को नियोजित करते हैं, उनमें से प्रत्यय पेड़ और परिमित-राज्य मशीनों।

वर्ण स्ट्रिंग-उन्मुख भाषाएँ और उपयोगिताएँ
कैरेक्टर स्ट्रिंग्स एक ऐसा उपयोगी डेटाटाइप है जिसे स्ट्रिंग प्रोसेसिंग एप्लिकेशन को लिखने में आसान बनाने के लिए कई भाषाओं को डिज़ाइन किया गया है। उदाहरणों में निम्नलिखित भाषाएँ सम्मिलित हैं:
 * AWK (प्रोग्रामिंग भाषा)
 * आइकन (प्रोग्रामिंग भाषा)
 * कण्ठमाला
 * पर्ल
 * REXX
 * रूबी (प्रोग्रामिंग भाषा)
 * सेड
 * स्नोबोल
 * आविष्कार
 * टीटीएम (प्रोग्रामिंग भाषा)

कई यूनिक्स उपयोगिताओं सरल स्ट्रिंग जोड़तोड़ करती हैं और कुछ शक्तिशाली स्ट्रिंग प्रोसेसिंग एल्गोरिदम को आसानी से प्रोग्राम करने के लिए इस्तेमाल किया जा सकता है। फ़ाइलें और परिमित धाराएँ स्ट्रिंग के रूप में देखी जा सकती हैं।

कुछ अप्लिकेशन प्रोग्रामिंग अंतरफलक जैसे मल्टीमीडिया नियंत्रण इंटरफ़ेस, एम्बेडेड SQL या printfफ का उपयोग करें जो कमांड को पकड़ने के लिए स्ट्रिंग्स का उपयोग करते हैं।

पर्ल, पायथन (प्रोग्रामिंग भाषा), रूबी और टीसीएल सहित कई पिस्त्री प्रोग्रामिंग भाषा पाठ संचालन को सुविधाजनक बनाने के लिए नियमित अभिव्यक्तियों को नियुक्त करती हैं। पर्ल विशेष रूप से इसकी नियमित अभिव्यक्ति के उपयोग के लिए नोट किया जाता है, और कई अन्य भाषाएं और अनुप्रयोग पेर्ल संगत नियमित अभिव्यक्तियों को लागू करते हैं।

पर्ल और रूबी जैसी कुछ भाषाएं स्ट्रिंग इंटरपोलेशन का समर्थन करती हैं, जो मनमाना भावों का मूल्यांकन करने और स्ट्रिंग शाब्दिक में सम्मिलित करने की स्वीकृति देता है।

वर्ण स्ट्रिंग फ़ंक्शंस
स्ट्रिंग फ़ंक्शंस का उपयोग स्ट्रिंग्स बनाने या म्यूटेबल स्ट्रिंग की सामग्री को बदलने के लिए किया जाता है। उनका उपयोग स्ट्रिंग के बारे में जानकारी पूछने के लिए भी किया जाता है। कंप्यूटर प्रोग्रामिंग भाषा के आधार पर कार्यों का सेट और उनके नाम भिन्न होते हैं।

स्ट्रिंग फ़ंक्शन का सबसे बुनियादी उदाहरण स्ट्रिंग लंबाई फ़ंक्शन है - फ़ंक्शन जो स्ट्रिंग की लंबाई लौटाता है (किसी भी टर्मिनेटर वर्ण या स्ट्रिंग की आंतरिक संरचनात्मक जानकारी की गणना नहीं करता है) और स्ट्रिंग को संशोधित नहीं करता है। इस फ़ंक्शन को प्रायः  या   नाम दिया जाता है। उदाहरण के लिए,   11 वापस आ जाएगी। एक अन्य सामान्य कार्य संयोजन है, जहां दो स्ट्रिंगों को जोड़कर एक नई स्ट्रिंग बनाई जाती है, प्रायः यह + अतिरिक्त ऑपरेटर होता है।

कुछ माइक्रोप्रोसेसर के निर्देश सेट आर्किटेक्चर में स्ट्रिंग ऑपरेशंस के लिए प्रत्यक्ष समर्थन होता है, जैसे ब्लॉक कॉपी (उदाहरण के लिए इंटेल x86m ) ​​में)।

औपचारिक सिद्धांत
चलो σ प्रतीकों का एक परिमित सेट (वैकल्पिक रूप से वर्ण कहा जाता है), जिसे वर्णमाला (औपचारिक भाषाएं) कहा जाता है।प्रतीकों की प्रकृति के बारे में कोई धारणा नहीं की जाती है। Σ से अधिक एक स्ट्रिंग (या शब्द) σ से प्रतीकों का कोई परिमित अनुक्रम है। उदाहरण के लिए, यदि σ = {0, & nbsp; 1}, तो 01011 σ पर एक स्ट्रिंग है।

एक स्ट्रिंग एस की लंबाई एस (अनुक्रम की लंबाई) में प्रतीकों की संख्या है और कोई भी गैर-नकारात्मक पूर्णांक हो सकता है;यह प्रायः के रूप में निरूपित किया जाता है | s |खाली स्ट्रिंग लंबाई 0 के σ पर अद्वितीय स्ट्रिंग है, और इसे ε या λ को दर्शाया गया है। लंबाई n के σ पर सभी स्ट्रिंग का सेट σ को दर्शाया गया हैn।उदाहरण के लिए, यदि σ = {0, 1}, तो σ2 = {00, 01, 10, 11}।ध्यान दें कि σकिसी भी वर्णमाला के लिए 0 = {}}।

किसी भी लंबाई के σ पर सभी स्ट्रिंग का सेट σ का क्लेन स्टार है और इसे दर्शाया गया है*।के संदर्भ में n ,
 * $$\Sigma^{*} = \bigcup_{n \in \mathbb{N} \cup \{0\}} \Sigma^{n}$$

उदाहरण के लिए, यदि σ = {0, 1}, तो σ* = {ε, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, ...}।हालांकि सेट σ* अपने आप में अनौपचारिक रूप से अनंत है, σ का प्रत्येक तत्व* परिमित लंबाई का एक स्ट्रिंग है।

Σ पर स्ट्रिंग्स का एक सेट (यानी किसी भी सबसेट का σ*) को σ पर एक औपचारिक भाषा कहा जाता है।उदाहरण के लिए, यदि σ = {0, 1}, एक समान संख्या में शून्य, {,, 1, 00, 11, 001, 010, 100, 111, 0000, 0011, 0101, 0110, 1001 के साथ स्ट्रिंग्स का सेट।1010, 1100, 1111, ...}, σ पर एक औपचारिक भाषा है।

कॉन्टेनेशन और सबस्ट्रिंग
Concatenation एक महत्वपूर्ण द्विआधारी ऑपरेशन है।*।किसी भी दो स्ट्रिंग के लिए s और t in में*, उनके संघनन को टी में वर्णों के अनुक्रम के बाद प्रतीकों के अनुक्रम के रूप में परिभाषित किया गया है, और इसे दर्शाया गया है।उदाहरण के लिए, यदि σ = {a, b, ..., z}, s & nbsp; = & nbsp;bear, और t & nbsp; = & nbsp;hug, तब st & nbsp; = & nbsp;bearhug और ts & nbsp; = & nbsp;hugbear।

स्ट्रिंग कंसैटेनेशन एक साहचर्य, लेकिन गैर-विनिमेय ऑपरेशन है।खाली स्ट्रिंग ε पहचान तत्व के रूप में कार्य करता है;किसी भी स्ट्रिंग के लिए, εs = sε = s।इसलिए, सेट σ* और Concatenation ऑपरेशन एक मोनॉयड बनाते हैं, σ द्वारा उत्पन्न मुक्त मोनोइड।इसके अलावा, लंबाई फ़ंक्शन σ से एक मोनोइड समरूपता को परिभाषित करता है* गैर-नकारात्मक पूर्णांक (यानी, एक फ़ंक्शन $$L: \Sigma^{*} \mapsto \mathbb{N} \cup \{0\}$$, ऐसा है कि $$L(st)=L(s)+L(t)\quad \forall s,t\in\Sigma^*$$)।

एक स्ट्रिंग एस को कहा जाता है कि अगर वहाँ सम्मिलित है (संभवतः खाली) स्ट्रिंग्स यू और वी जैसे कि टी = यूएसवी।द्विआधारी संबंध σ पर एक आंशिक आदेश को परिभाषित करता है का एक सबस्ट्रिंग है*, जिसका सबसे कम तत्व खाली स्ट्रिंग है।

उपसर्ग और प्रत्यय
एक स्ट्रिंग s को t का एक सबस्ट्रिंग#उपसर्ग कहा जाता है यदि वहाँ एक स्ट्रिंग u सम्मिलित है जैसे कि t = su।यदि आप गैर -रिक्त हैं, तो एस को टी का एक उचित उपसर्ग कहा जाता है।सममित रूप से, एक स्ट्रिंग s को कहा जाता है कि अगर एक स्ट्रिंग यू सम्मिलित है तो टी का एक सबस्ट्रिंग#प्रत्यय है जैसे कि टी = हमें।यदि आप गैर -रिक्त हैं, तो एस को टी का एक उचित प्रत्यय कहा जाता है।प्रत्यय और उपसर्ग टी के सबस्ट्रिंग हैं।दोनों संबंधों का एक उपसर्ग है और इसका एक प्रत्यय है जो उपसर्ग आदेश हैं।

उलट
एक स्ट्रिंग का रिवर्स एक ही प्रतीकों के साथ एक स्ट्रिंग है लेकिन रिवर्स ऑर्डर में।उदाहरण के लिए, यदि S = ABC (जहां A, B, और C वर्णमाला के प्रतीक हैं), तो S का उल्टा CBA है।एक स्ट्रिंग जो स्वयं का रिवर्स है (जैसे, एस = मैडम) को एक पैलिंड्रोम#कम्प्यूटेशन थ्योरी कहा जाता है, जिसमें खाली स्ट्रिंग और लंबाई 1 के सभी स्ट्रिंग भी सम्मिलित हैं।

रोटेशन
एक स्ट्रिंग s = uv को t = vu के रोटेशन के रूप में कहा जाता है।उदाहरण के लिए, यदि σ = {0, 1} स्ट्रिंग 0011001 0100110 का एक रोटेशन है, जहां U = 00110 और V = 01. एक अन्य उदाहरण के रूप में, स्ट्रिंग ABC में तीन अलग -अलग घुमाव हैं, अर्थात।एबीसी स्वयं (यू = एबीसी, वी = ε), बीसीए (यू = बीसी, वी = ए के साथ), और कैब (यू = सी, वी = एबी के साथ) के साथ।

लेक्सोग्राफिक ऑर्डरिंग
यह प्रायः स्ट्रिंग्स के एक सेट पर एक आदेश सिद्धांत को परिभाषित करना उपयोगी होता है।यदि वर्णमाला σ में कुल आदेश है (cf. वर्णमाला क्रम) कोई व्यक्ति σ पर कुल आदेश को परिभाषित कर सकता है* लेक्सिकोग्राफिकल ऑर्डर कहा जाता है।उदाहरण के लिए, यदि σ = {0, 1} और 0 <1, तो σ पर लेक्सिकोग्राफिक ऑर्डर* में रिश्ते सम्मिलित हैं ε <0 <00 <000 <000 <... <0001 <001 <01 <010 <011 <0110 <011111 <1 <10 <100 <101 <111 <1111 <111111यदि वर्णमाला आदेश है, तो लेक्सिकोग्राफिक ऑर्डर कुल क्रम है, लेकिन किसी भी गैर-वर्णमाला के लिए अच्छी तरह से स्थापित नहीं है, भले ही वर्णमाला क्रम हो।

एक वैकल्पिक स्ट्रिंग ऑर्डर के लिए शॉर्टलेक्स देखें जो अच्छी तरह से स्थापितता को संरक्षित करता है।

स्ट्रिंग संचालन
स्ट्रिंग्स पर कई अतिरिक्त संचालन सामान्यतः औपचारिक सिद्धांत में होते हैं।ये स्ट्रिंग ऑपरेशंस पर लेख में दिए गए हैं।

टोपोलॉजी
स्ट्रिंग्स एक ग्राफ पर नोड्स के रूप में निम्नलिखित व्याख्या को स्वीकार करते हैं, जहां k σ में प्रतीकों की संख्या है:
 * लंबाई एन की निश्चित-लंबाई वाले स्ट्रिंग को एन-डायमेंशनल अतिविम में पूर्णांक स्थानों के रूप में देखा जा सकता है, जिसमें लंबाई K-1 के किनारों के साथ देखा जा सकता है।
 * चर-लंबाई वाले स्ट्रिंग्स (परिमित लंबाई के) को K-are ट्री पर नोड्स के रूप में देखा जा सकता है। परफेक्ट K-are ट्री।
 * अनंत स्ट्रिंग (अन्यथा यहां नहीं माना जाता है) को K-Node पूर्ण ग्राफ पर अनंत पथ के रूप में देखा जा सकता है।

फिक्स्ड-लेंथ स्ट्रिंग्स या वेरिएबल-लेंथ स्ट्रिंग्स के सेट पर प्राकृतिक टोपोलॉजी असतत टोपोलॉजी है, लेकिन अनंत स्ट्रिंग्स के सेट पर प्राकृतिक टोपोलॉजी सीमित टोपोलॉजी है, अनंत स्ट्रिंग्स के सेट को सेट की व्युत्क्रम सीमा के रूप में देखते हुए परिमित तार। यह पी-एडिक नंबरों और कैंटर सेट के कुछ निर्माणों के लिए उपयोग किया जाने वाला निर्माण है, और समान टोपोलॉजी उत्पन्न करता है।

टोपोलॉजी के स्ट्रिंग अभिवेदन के बीच समाकृतिकता लेक्सोग्राफिक रूप से न्यूनतम स्ट्रिंग रोटेशन के अनुसार सामान्यीकरण करके पाया जा सकता है।

यह भी देखें

 * बाइनरी सेफ- स्ट्रिंग मैनिपुलेटिंग फ़ंक्शंस की एक संपत्ति उनके इनपुट को कच्चे डेटा स्ट्रीम के रूप में मानती है
 * बिट सरणी - बाइनरी अंकों की एक स्ट्रिंग
 * सी ++ स्ट्रिंग हैंडलिंग - सी स्ट्रिंग हैंडलिंग का अवलोकन
 * C ++ स्ट्रिंग हैंडलिंग - C ++ स्ट्रिंग हैंडलिंग का अवलोकन
 * प्रोग्रामिंग भाषाओं की तुलना (स्ट्रिंग फ़ंक्शन)
 * कनेक्शन स्ट्रिंग - एक कनेक्शन प्रारम्भ करने के लिए एक ड्राइवर को पास किया गया (जैसे, एक डेटाबेस के लिए)
 * खाली स्ट्रिंग - इसके गुण और प्रोग्रामिंग भाषाओं में प्रतिनिधित्व
 * असंगत स्ट्रिंग - एक स्ट्रिंग जिसे किसी भी एल्गोरिथ्म द्वारा संपीड़ित नहीं किया जा सकता है
 * रस्सी (डेटा संरचना) - लंबे स्ट्रिंग में हेरफेर करने के लिए एक डेटा संरचना
 * स्ट्रिंग मीट्रिक - स्ट्रिंग के बीच समानता की धारणा