आप स्ट्रिंग रिवर्सल के लिए क्या उपयोग करते हैं? [बन्द है]


15

PHP strrev()में, रेल में, यह है .reverse, लेकिन अधिकांश भाषाओं में कोई स्ट्रिंग रिवर्स फ़ंक्शन नहीं है। कुछ में सरणी के उल्टे कार्य होते हैं जिनका उपयोग वर्णों पर किया जा सकता है। मैं सोच रहा था कि यह एक प्रमुख निरीक्षण होना चाहिए, लेकिन फिर यह मेरे लिए हुआ, आप वास्तव में स्ट्रिंग रिवर्स के लिए क्या उपयोग करेंगे ???

केवल एक बार मैं सोच सकता हूं कि मैंने देखा है कि यह डेमो और सबक में है "हैलो वर्ल्ड!" "! dlroW olleH" में।

मेरा सवाल यह है कि; क्या एक स्ट्रिंग को उलटने के लिए एक उपयोग है या यह पूरी तरह से व्यर्थ है?

परिशिष्ट

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


@clockworkgeek - यदि आप किसी उम्मीदवार को अपनी पसंदीदा भाषा में स्ट्रिंग रिवर्सल करने के लिए कहते हैं, तो आपको आश्चर्य होगा कि आपके द्वारा उल्लिखित मूल फ़ंक्शन के साथ कितने नहीं आते हैं। फिर कितने लोग इसे लागू करने के लिए पाश के साथ नहीं आ सकते।
justkt

@justkt - ऐसा होने के लिए इंतज़ार कर रहे एक अन्य प्रश्न है, लेकिन इसके बजाय TopCoder के लिए एक विषय हो सकता है।
घड़ी की कल की

6
एक पाठ संदेश भेजने के लिए जिसे ड्राइविंग करते समय रियरव्यू मिरर में पढ़ा जा सकता है, इसलिए पुलिस ध्यान नहीं देगी।
जेएफओ

@justkt - अगर मुझे इसे करने के लिए एक पुनरावृत्त लूप लिखना था तो मैं विपरीत छोरों पर स्वैप करना शुरू कर दूंगा जब तक कि बीच में नहीं पहुंच जाता। लेकिन फिर आप दो मूल्यों की अदला-बदली कैसे करते हैं? यहाँ बस सबसे अच्छा जवाब है जो मुझे दिया गया है:a ^= b; b ^= a; a ^= b;
घड़ी की कल की

1
मैं स्ट्रिंग्स को
उलटाने के

जवाबों:


19

Sexegers

कभी-कभी, नियमित अभिव्यक्ति को सम्‍मिलित करने वाली समस्‍याओं को इनपुट स्ट्रिंग को उलट कर और अलग तरीके से समस्या से निपटने के द्वारा अधिक आसानी से लिखा जा सकता है।

उस आदमी की तकनीक शिष्टाचार जिसने मुझे पर्ल सिखाया।

PerlMonks पर Sexeger


धन्यवाद। किसी चीज़ के अंतिम को खोजने के लिए एक बहुत ही आसान ट्रिक। विधिवत् नोट किया हुआ।
क्लॉकवर्कजेक

मैं वर्षों से ऐसा कर रहा हूं। ईमेल पतों को पार्स करने में मदद करता है।
साल

23

खैर, यह एक जीभ में गाल का जवाब है।

"दिन में वापस" मेरे पास एक यूनिक्स बॉक्स है, और इसमें अंग्रेजी शब्दों की एक ऑर्डर की गई डिक्शनरी है, जिसका इस्तेमाल वर्तनी-जाँच के लिए किया जाता है।

मैंने शब्दकोश में सभी शब्दों को उलट-पलट कर, छाँटकर, और फिर उन्हें फिर से जोड़कर एक नई फ़ाइल बनाई। परिणाम दाएं-बाएं से छांटे गए शब्दों की एक सूची थी।

इसलिए यदि आपने इसे एक शब्द के लिए खोजा है, तो उस शब्द के बगल में समान अंत वाले शब्द होंगे। इसलिए छोटी कविताओं को बनाना आसान था!

जब आप देखते हैं कि क्या तुकबंदी है तो आप वास्तव में खुद को खुश कर सकते हैं।


13

मैं ~ 10 साल के लिए एक सांकेतिक शब्दों में बदलनेवाला / डेवलपर / सिस्टम प्रशासक किया गया है और मैं याद नहीं कर सकते कभी वास्तविक जीवन की परिस्थितियों में स्ट्रिंग उत्क्रमण की जरूरत है।

केवल तत्काल उपयोग-केस जिसे मैं सोच सकता हूं कि संख्या आधार रूपांतरण है: भोलेपन से किया गया, प्रक्रिया एक उलट स्ट्रिंग लौटाती है। हालांकि, गणित के एक बिट के साथ, आप आवश्यक स्थान की मात्रा को उल्टा कर सकते हैं, इसलिए आप बफर को अंत से भरना शुरू कर सकते हैं।


1
यह संभव है कि स्ट्रिंग को उलटने की तुलना में गणित का बिट अधिक महंगा है, इसलिए आपके प्लेटफॉर्म (ARM, MIPS, x86) पर बेंचमार्किंग के बाद आप स्ट्रिंग रिवर्स का उपयोग कर सकते हैं। शायद।
ज़ैन लिंक्स

आप बफर को अंत से भर सकते हैं और memmoveसमाप्त होने पर प्रारंभ का उपयोग कर सकते हैं। यह संभवतः आवश्यक अंकों की संख्या की गणना करने के लिए लॉग (एन) / लॉग (आधार) की गणना से सस्ता है।
पैट्रिक शाल्टर

12
public bool IsPalindrome(string toCheck)
{
    return toCheck == toCheck.Reverse();
}

1
हां - हमारे पास वास्तव में एक साक्षात्कार-स्क्रीनिंग है जहां उम्मीदवार एक पैलिंड्रोम चेकर लिखते हैं और अधिकांश ऐसा करते हैं। हालांकि, मैं जैसे कि यह बेहतर है जब उम्मीदवारों से पुनरावृति 0करने के लिए n/2और विपरीत छोर पर चरित्र की तुलना करें।
निकोल

@ संदर्भ: आप यह भी कर सकते हैं: while ( (*p == *q) && (p <= q) {p++; q--} return p > q;सी और अन्य सूचक भाषाओं में स्ट्रिंग का पी सेट, स्ट्रिंग का क्यू अंत, सेट पी ।
माइकल के डी

4
मुझे लगता है कि "पैलिंड्रोम चेकर" उल्लेखनीय रूप से उपयोगी नहीं है, "कम से कम एक उद्देश्य के लिए एक पैलिंड्रोम चेकर लिखें"।
घड़ी की कल की

2
एक साक्षात्कार में, उन्होंने मुझे एक स्ट्रिंग को उलटने के लिए कहा और उन्होंने कहा "इस नो स्ट्रिंग को याद रखें। कविता ()। इसलिए मैंने स्ट्रिंग को एक चरित्र सरणी में बदल दिया और Array.Reverse किया
जैक

यह एक बहुत ही आला उपयोग है और एक नहीं है जिसे आप आमतौर पर कहेंगे कि भाषा / पुस्तकालय में शामिल करने लायक है!
दान डिपलो

8

साक्षात्कार!

एक स्ट्रिंग को उलटना (जगह में या नहीं) बुनियादी प्रोग्रामिंग ज्ञान के लिए एक बहुत ही सामान्य साक्षात्कार प्रश्न है। इन कार्यों में निर्मित एक भाषा के लिए साक्षात्कार करना मुश्किल होगा। उम्मीदवार को वास्तव में कुछ जानना होगा। 1


1: यह एक जीभ में गाल का जवाब है।


6

मैंने ऐसी स्थितियों को देखा है जहां एक डेस्कटॉप एप्लिकेशन एम्बेडेड उपकरणों के साथ बात कर रहा था और बाइट-ऑर्डर एंडियननेस को लगातार स्विच कर रहा था, और डेटा को स्ट्रिंग्स के रूप में चारों ओर ले जाया गया था। हालांकि मेरे लिए इसके बारे में है।

मैंने उस एप्लिकेशन के लिए स्ट्रिंग्स का उपयोग नहीं किया होगा, लेकिन यह वैसा ही था जैसा कि .....


इस उत्तर के लिए +1। यह कम से कम एक व्यावहारिक उदाहरण है, हालांकि मैंने भी इसे दूसरे तरीके से किया होगा, शायद आदिम प्रकारों को चुनकर जो अलग-अलग एंडियन हैं।
क्लॉकवर्कजेक

5
<span style="unicode-bidi: bidi-override; direction:rtl;">
    <?php echo strrev($emailaddress); ?>
</span>

ईमेल पते को बाधित करने के लिए सबसे अच्छा समाधान नहीं है, क्योंकि जब आप इसे क्लिपबोर्ड पर जोड़ते हैं तो यह अभी भी उलट है। और, अगर यह लोकप्रिय हो गया, तो यह जल्द ही ईमेल स्क्रैपिंग बॉट्स द्वारा पता लगाया जाएगा।

फिर भी, यह सुझाव दिया गया है


1
और उपयोग में सबसे लोकप्रिय obfuscation केवल उस पूरे लेख में एक ही वाक्य दिया गया था ... एक छवि के रूप में एन्कोडिंग।
क्लॉकवर्कजेक

1
@clockworkgeek, यह एक लोकप्रिय हो सकता है, लेकिन IMHO यह सबसे प्रभावी समाधानों में से सबसे खराब है - सुपर जेनरेट करने के लिए आसान नहीं, HTML में एम्बेडेड नहीं (गति, छवियों का भंडारण, सर्वर लोड), जगह से बाहर दिखता है, स्टाइल नहीं किया जा सकता है सीएसएस के साथ, और स्ट्रिंग रिवर्सल के रूप में एक ही गरीब उपयोगकर्ता अनुभव, इसे याद रखने और इसे फिर से लिखने के लिए। और शायद अधिक समस्याओं मैं नहीं सोच रहा हूँ।
निकोल

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

5

ASCII आनुवंशिक जानकारी के लिए सबसे अच्छा एन्कोडिंग नहीं है (आप आधार प्रकार ACGT को 2 बिट्स के रूप में पैक कर सकते हैं)। उन्हें longlongs की एक सरणी में पैक करें और आपको प्रति शब्द 32 आनुवंशिक "पत्र" मिलता है। डीएनए को चारों ओर घुमाया जा सकता है, इसलिए आपको परीक्षण के अनुक्रम के विपरीत दोनों प्रतियों के खिलाफ डीएनए का एक हिस्सा चेक करने के लिए मिला है। तो 2bit मात्रा के एक पैक स्ट्रिंग को उलटने में सक्षम होना विभिन्न प्रकार के आनुवंशिक विश्लेषण के लिए बहुत उपयोगी हो सकता है।

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

Tangurena: आप जिस ऑपरेशन का उल्लेख करते हैं, उसे जनसंख्या गणना कहा जाता है। बिट पैक डेटा के लिए इसी तरह के desirables अग्रणी और शून्य गणना में पीछे हैं। वहाँ बहुत साफ चीजें हैं जो एक बिट पैक डेटा के साथ कर सकते हैं। एक लंबे ऑपरेशन पर एक एकल ऑपरेशन 64way डेटा समानांतर है, इसलिए यदि आप जानते हैं कि आप क्या कर रहे हैं, तो आप कुछ प्रकार के कम्प्यूटेशन्स के लिए अविश्वसनीय प्रदर्शन प्राप्त कर सकते हैं।


दिलचस्प विषय, बस आप थोड़ा सा क्षेत्र कैसे उलट देंगे?
क्लॉकवर्कजेक

"आप थोड़ा सा क्षेत्र कैसे उलट देंगे?"
ओमेगा सेंटौरी

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

5

कुछ भी जहां उल्टे स्ट्रिंग के साथ काम करना आसान है।

स्ट्रिंग्स के रूप में पूर्णांक के साथ काम करना बहुत आसान है यदि स्ट्रिंग्स उलट हो। मैंने बड़े पूर्णांकों के साथ गणित करने के लिए कुछ पुस्तकालय कार्यों का निर्माण किया और अंकगणितीय कार्यों को सरल बनाने के लिए स्ट्रिंग रिवर्सल का उपयोग किया।

दी, मैंने इसका उपयोग केवल प्रोजेक्ट यूलर पर उत्तर क्रैंक करने के लिए किया है, लेकिन फिर भी, मूल आधार रखती है।


+1। संख्याओं के स्ट्रिंग निरूपण का उपयोग करते समय, प्रत्यावर्तित निरूपण बहुत सहायक होता है। और आमतौर पर मानक पुस्तकालय सामान्य क्रम में संख्याओं का प्रतिनिधित्व करेगा।
222

3

हो सकता है कि कम लागत वाली बहुभाषी सहायता, उन भाषाओं के लिए जो बाएँ-से-दाएँ के बजाय दाएँ-बाएँ (जैसे अरबी) का उपयोग करती हैं। बेशक आपको सही चरित्र को संशोधित करने वाले उच्चारण पात्रों के लिए बाहर देखना होगा ...


2

मुझे पता नहीं है कि किसी को पैलिन्ड्रोम की जांच के लिए जलने की आवश्यकता है ...।

मुझे नहीं लगता कि यह पूरी तरह से बेकार है, क्योंकि अच्छी तरह से ऐसी परिस्थितियां हो सकती हैं जहां किसी को एक स्ट्रिंग को उलटने में सक्षम होने की आवश्यकता होती है।


अनुवर्ती प्रश्न यह होगा कि आपको वास्तविक दुनिया में एक पैलिंड्रोम की जांच करने की आवश्यकता कब हुई है? फिर से, मैंने कभी भी एल्गोरिथम पाठ में किसी को भी देखभाल करते देखा है।
क्लॉकवर्कजेक

: उदाहरण के लिए इस तरह jimsabo.com/palindrome.html
Darknight

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

2

प्राकृतिक भाषा प्रसंस्करण और पार्सिंग में, कभी-कभी शुरू से अंत तक एक स्ट्रिंग खोजना आसान होता है। एक स्ट्रिंग रिवर्स डिबगिंग के लिए उपयोगी होगी, या लूप लिखने के वैकल्पिक तरीके के रूप में (स्ट्रिंग को उल्टा करें और फिर इंडेक्स 0 से n-1 तक लूप करें)।

साथ ही कुछ भाषाएं बाएं से दाएं लिखी जाती हैं, इसलिए एक स्ट्रिंग रिवर्सल का उपयोग इसके लिए किया जा सकता है यदि आप एक ऐसे वातावरण में थे जो मूल रूप से LTR / RTL भाषाओं को नहीं पहचानता था।

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


1

संकलक के लिए?

यह मनोरंजक है, लेकिन एक भाषा में अधिकांश प्रतीक एक सामान्य पैटर्न से शुरू होंगे। मैं यहां हंगेरियन नोटेशन के बारे में बात नहीं कर रहा हूं, लेकिन अगर आप नामस्थान / कक्षाओं के बारे में सोचते हैं, तो बहुत सारे प्रतीक वास्तव में एक सामान्य उपसर्ग साझा करेंगे ।

myproject::SomeClass::GetFoo
myproject::SomeClass::GetBar

समस्या यह है कि जब एक द्विआधारी खोज कर रहे हैं, तो सामान्य उपसर्ग सबसे खराब चीज है जिसे आप समाप्त कर सकते हैं, क्योंकि आप उन उपसर्गों की तुलना बार-बार करेंगे।

दूसरी ओर, यदि आप पीछे के तारों पर एक नज़र डालते हैं, तो आप बहुत अधिक एन्ट्रापी देखेंगे! और फिर अचानक एक द्विआधारी खोज (एक ट्राइ से अधिक) बहुत अधिक शक्तिशाली हो जाती है!

यह मुझे हमेशा गुदगुदाता है कि सी ++ मंगली नाम (gcc द्वारा) नाम स्थान LAST रखने के लिए उलट नहीं किया गया :)


0

मैं समय-समय पर खोजों के लिए फ़ोन नंबर और कुछ स्ट्रिंग फ्लिप करता हूं


0

केवल एक बार मैं याद कर सकता हूं कि स्ट्रिंग रिवर्सल का उपयोग किया जा रहा था यह एक ऐसा फ़ंक्शन था जिसे मैंने वापस देखा जो फ़ाइल नामों को पार्स करते समय इसका उपयोग किया था, यह सुनिश्चित करने के लिए कि ''। यह फ़ाइल नाम में पाया गया वास्तव में अंतिम बिंदु था जिसने एक्सटेंशन से फ़ाइल नाम को अलग कर दिया था। जैसे, फ़ाइल नाम को पार्स data.2010.12.08.datकरना, जैसे आप स्ट्रिंग को उल्टा करेंगे, पहले डॉट को खोजें, मूल स्ट्रिंग के अंत से उस स्थिति को घटाएँ और सबस्ट्रिंग लें। मैं यह करने के लिए इष्टतम तरीका नहीं कह रहा हूँ, लेकिन यह क्या किया thats। यह पावरबिल्डर में रहा हो सकता है, जहां इस तरह के कार्यों के अजीब उपयोग विभिन्न गैर-स्पष्ट समस्याओं को हल करने के लिए आम थे।


0

केवल वास्तविक कृमि ऐप मैंने स्ट्रैव का उपयोग करते हुए देखा, डेटाबेस में उपयोगकर्ता पासवर्ड 'अपठनीय' को संग्रहीत करने के लिए था ...

लेकिन मुझे याद है कि स्ट्रिव का उपयोग करने के लिए सी में एक पैटर्न है, शायद मैं बाद में इसके साथ आता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.