मैं एक स्ट्रिंग कैसे विभाजित करूं ??? Plz की मदद करें? (कोड ट्रोलिंग) [बंद]


21

मेरा होमवर्क असाइनमेंट एक स्ट्रिंग है और इसे हर नई लाइन में टुकड़ों में विभाजित करता है। मुझे नहीं पता हैं क्या करना है! कृपया सहायता कीजिए!

नोट: यह एक प्रश्न है। कृपया प्रश्न और / या उत्तर को गंभीरता से न लें। अधिक जानकारी यहाँ



@ user1981338, न तो, कोड-ट्रोलिंग टैग की विकी पढ़ें।
Turion

7
यहाँ एक महत्वपूर्ण संसाधन है जिसे मैंने स्ट्रिंग विभाजन के बारे में पाया है ... मुझे आशा है कि आप इसे उपयोगी पाएंगे! bit.ly/1dSklhO
वैल्ली वेस्ट

कोड-ट्रोलिंग आधिकारिक रुख के अनुसार हटाए जाने की प्रक्रिया में है इस पोस्ट ने पोल पर 75% से अधिक "डिलीट" वोट प्राप्त किए । इसमें प्रश्न और उत्तरों पर बड़ी मात्रा में वोट होते हैं, लेकिन यह 3 महीने से अधिक पुराना है और कोई प्रतिष्ठा नहीं खोएगा। इसलिए, मैं इसे बंद कर रहा हूं और इसे 24 घंटे में हटा दूंगा। ध्यान दें कि चूंकि यह एक आउटलाइयर है कि इसमें बड़ी मात्रा में वोट हैं, इसलिए मुझे मेटा पर एक ठोस तर्क देते हुए अनिर्धारित और लॉक करने में खुशी होगी।
दरवाज़े

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

जवाबों:


48

सी

मेरा होमवर्क असाइनमेंट एक स्ट्रिंग है और इसे हर नई लाइन में टुकड़ों में विभाजित करता है। मुझे नहीं पता हैं क्या करना है! कृपया सहायता कीजिए!

एक शुरुआत सी प्रोग्रामिंग वर्ग के लिए मुश्किल समस्या! पहले आपको इस जटिल विषय के बारे में कुछ मूल बातें समझनी होंगी।

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

  • पर विंडोज , नई लाइन का एक क्रम है दो बैकस्लैश और n (या स्ट्रिंग: स्ट्रिंग में वर्णों "\n")

  • पर लिनक्स या ओएस / एक्स Macs , इसके बारे में एक दृश्य है चार बैकस्लैश, एन, बैकस्लैश, और फिर आर: (या वर्ण "\n\r")।

(दिलचस्प ऐतिहासिक नोट: पुराने मैकिंटोश पर यह चार वर्णों का एक अलग क्रम था: "\ r \ n" ... पूरी तरह से पीछे की ओर से यूनिक्स ने क्या किया? इतिहास अजीब सड़कें लेता है।)

ऐसा लग सकता है कि लिनक्स विंडोज की तुलना में अधिक बेकार है, लेकिन यह वास्तव में लंबे अनुक्रम का उपयोग करने के लिए एक बेहतर विचार है। क्योंकि Windows ऐसे छोटे अनुक्रम का उपयोग करता है, C भाषा रनटाइम \nविशेष सिस्टम कॉल का उपयोग किए बिना वास्तविक अक्षरों को प्रिंट नहीं कर सकता है । आप इसे आमतौर पर सिस्टम कॉल के बिना लिनक्स पर कर सकते हैं (यह प्रिंट \n\या \n\q... कुछ भी लेकिन \n\r) कर सकते हैं। लेकिन चूंकि C का मतलब क्रॉस प्लेटफॉर्म है, इसलिए यह सबसे सामान्य-भाजक को लागू करता है। तो आप हमेशा \nअपनी किताब में देखते रहेंगे ।

(ध्यान दें: यदि आप सोच रहे हैं कि हम \nहर बार जब हम नई सुर्खियों में आए बिना कैसे बात कर रहे हैं, तो StackOverflow लगभग पूरी तरह से HTML में लिखा है ... C. नहीं। तो यह बहुत अधिक आधुनिक है। C के इन पुराने पहलुओं में से कई। उन बातों से संबोधित किया जा सकता है जिनके बारे में आपने सुना होगा, जैसे कि CLANG और LLVM।)

लेकिन हम जो काम कर रहे हैं, उस पर वापस। आइए एक स्ट्रिंग की कल्पना करें जिसके तीन टुकड़े हैं और दो न्यूलाइन्स हैं, जैसे:

"foo\nbaz\nbar"

आप देख सकते हैं कि स्ट्रिंग की लंबाई 3 + 2 + 3 + 2 + 3 = 13. है, इसलिए आपको इसके लिए लंबाई 13 का बफर बनाना होगा, और सी प्रोग्रामर हमेशा सुरक्षित रहने के लिए अपने सरणियों के आकार में एक जोड़ते हैं। तो अपना बफ़र बनाएं और उसमें स्ट्रिंग कॉपी करें:

/* REMEMBER: always add one to your array sizes in C, for safety! */
char buffer[14];
strcpy(buffer, "foo\nbaz\nbar");

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

char pattern[2];
strcpy(pattern, "\");

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

तो चलिए हम इस तरह से पैटर्न चाहते हैं:

char pattern[3];
strcpy(pattern, "\n");

जब हम दो तारों की तुलना करना चाहते हैं जो एक निश्चित लंबाई के होते हैं, तो हम उपयोग करते हैं strncmp । यह संभावित रूप से बड़े स्ट्रिंग के पात्रों की एक निश्चित संख्या की तुलना करता है, और आपको बताता है कि वे मेल खाते हैं या नहीं। तो strncmp("\nA", "\nB", 2)1 (सच्चा) देता है। यह तब भी है जब तार पूरी तरह से तीन की लंबाई के बराबर नहीं हैं ... लेकिन क्योंकि केवल दो वर्णों की आवश्यकता है।

तो चलो हमारे बफर के माध्यम से कदम उठाते हैं, एक समय में एक चरित्र, हमारे पैटर्न के लिए दो चरित्र मैच की तलाश में । हर बार जब हम एक n के बाद बैकस्लैश का दो-वर्ण अनुक्रम पाते हैं, तो हम बहुत ही विशेष सिस्टम कॉल का उपयोग करेंगेputc एक विशेष प्रकार के चरित्र को बाहर करने के लिए एक विशेष प्रकार की (या "syscall") का : ASCII कोड 10 , एक शारीरिक नई रूपरेखा प्राप्त करने के लिए ।

#include "stdio.h"
#include "string.h"

char buffer[14]; /* actual length 13 */
char pattern[3]; /* actual length 2 */
int i = 0;

int main(int argc, char* argv[]) {
    strcpy(buffer, "foo\nbar\nbaz");
    strcpy(pattern, "\n");

    while (i < strlen(buffer)) {
       if (1 == strncmp(buffer + i, pattern, 2)) {
           /* We matched a backslash char followed by n */
           /* Use syscall for output ASCII 10 */
           putc(10, stdout);
           /* bump index by 2 to skip both backslash and n */
           i += 2;
       } else {
           /* This position didn't match the pattern for a newline */
           /* Print character with printf */
           printf("%c", buffer[i]);
           /* bump index by 1 to go to next matchable position */
           i += 1;
       }
    }

    /* final newline and return 1 for success! */
    putc(10, stdout); 
    return 1;
}

इस कार्यक्रम का आउटपुट वांछित परिणाम है ... स्ट्रिंग विभाजन!

foo
baz
bar

\t \ trolling के लिए है ...

ऊपर से नीचे तक बिल्कुल गलत। फिर भी प्रशंसनीय-लगने वाली बकवास से भरा हुआ है जिसने पाठ्यपुस्तक या विकिपीडिया में क्या है जैसी जानकारी को छान मारा है। कार्यक्रम का तर्क प्रकट होता है गलत सूचना के संदर्भ में पारदर्शी , लेकिन पूरी तरह से भ्रामक है। यहां तक ​​कि वैश्विक चर और एक त्रुटि कोड, अच्छे उपाय के लिए ...

...

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

...

हम पाठक को समझाने की कोशिश करते हैं कि strncmpएक बूलियन ऑपरेशन है जो या तो मेल खाता है (1) या नहीं (0)। लेकिन इसमें वास्तव में तीन रिटर्न मान हैं (-1 मिलान कम, 0 के बराबर, 1 से अधिक मिलान के लिए) । हमारे दो चरित्र "पैटर्न" की तुलना नहीं की जा रही है [ \, n], बल्कि [\n ,]\0 ] ... अंतर्निहित अशक्त टर्मिनेटर उठा। जैसा कि यह क्रम स्ट्रिंग के माध्यम से स्लाइड करता है, यह कभी भी दो-चरित्र अनुक्रम से अधिक नहीं होगा, इसकी तुलना में ... कम से कम यह शून्य होगा यदि इनपुट स्ट्रिंग में एक समाप्ति नईलाइन है।

...

तो यह सब स्ट्रिंग के माध्यम से लूप है और इसे एक बार में एक वर्ण प्रिंट करता है। शीर्ष शाखा कभी नहीं चलती है। (हालांकि आप इसे प्राप्त कर सकते हैं यदि आपके स्ट्रिंग में कम-से-कम \nकोड थे, टैब कहो ... जिसका उपयोग आउटपुट से रहस्यमय रूप से लोप वर्णों के लिए किया जा सकता है :-P)


11
सफलता के लिए 1 वापसी। शानदार।
तूरियन

3
अधिकतम करने के लिए Awsome :)
जोहान्स

3
लानत है यह एक शुद्ध बुराई है।
थॉमस विगर्स 12

32
  1. एक कैंची और स्ट्रिंग को पकड़ो जिसे आप विभाजित करना चाहते हैं।
  2. कैंची खोलो।
  3. कैंची ब्लेड के बीच अपनी स्ट्रिंग रखो।
  4. कैंची बंद करो।

बधाई हो! आपकी स्ट्रिंग अब विभाजित होनी चाहिए। यदि नहीं, तो चरणों को तब तक दोहराएं जब तक कि यह न हो। यदि आपने चरणों को एक दो बार दोहराया है और स्ट्रिंग विभाजित नहीं होने तक है, तो एक तेज कैंची का उपयोग करने का प्रयास करें।

अस्वीकरण: मैं इस प्रक्रिया के दौरान आपके लिए लागू किसी भी क्षति के लिए जिम्मेदार नहीं हूं।


मैंने काम नहीं करने की कोशिश की ...
rakeshNS

30
मुझे "अपवाद: असुरक्षित ऑपरेशन मिला। कैंची से मत चलाओ"
पॉल

1
मेरी चट्टान ने कैंची को कुचल दिया! डी 'ओह!
bobbel

मेरी कैंची ने गलती से निर्देशों को काट दिया ... सीजी गलती?
डेविड विल्किंस

30

अजगर

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

s = "this\nis a\ntest\n"
print s

कृपया आगे बढ़ें और स्वीकार करें।


अतिरिक्त क्रेडिट के लिए, इसे एक पंक्ति में करने का प्रयास करें !!!
ऐनी-मूस -रिटनेट मोनिका

आप इस समय मुझसे एक वोट आगे हैं। लेकिन मैं नीचता के आग्रह का विरोध करूंगा। :-) अजीब तरह से, मेरा समाधान एक ही है ... बस बहुत ही आपत्तिजनक!
डॉ। रेम्बु

28

सी

सी में यह वास्तव में आसान है:

#include <stdio.h>

#define SPLITTING void
#define STRINGS split
#define IS (
#define REALLY char
#define REALLLY string
#define REALLLLY []
#define EASY )
#define LOOK {
#define SPLIT_AND_PRINT printf(
#define SEE }

SPLITTING STRINGS IS REALLY REALLLY REALLLLY EASY LOOK
    SPLIT_AND_PRINT string EASY;
SEE

इसे इस तरह से कॉल करें:

split("a\nb");

काम करने का उदाहरण:

http://codepad.org/GBHdz2MR
यह बुराई क्यों है:

  • यह printfस्ट्रिंग्स को विभाजित करने के लिए फ़ंक्शन पर निर्भर करता है
  • यह पूरी तरह से समझ से बाहर है
  • यह किसी को भी भ्रमित करेगा जो समझ में नहीं आता है #define(और जो लोग भी करते हैं)

2
वाह!!! यह बहुत बुरा है .... मैं दो बार वोट करना चाहता हूँ !!!!!!!!
फैब्रियो एरुजो

11

यह निम्नलिखित सरल एल्गोरिथ्म द्वारा कोड की कुछ पंक्तियों में किया जा सकता है:

  1. स्ट्रिंग में पहली नईलाइन वर्ण देखें।
  2. सूची में भाग को नई सूची में जोड़ें।
  3. स्ट्रिंग से न्यूलाइन तक का हिस्सा निकालें।
  4. यदि स्ट्रिंग खाली नहीं है, तो चरण 1 पर जाएं।

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

द्विआधारी खोज के लिए कोड थोड़ा अधिक जटिल है, क्योंकि यह पुनरावृत्ति और विभाजन की उन्नत तकनीकों और जीत का उपयोग करता है । लेकिन प्रदर्शन लाभ के लिए यह निश्चित रूप से इसके लायक है। यदि आप इसे जमा करते हैं, तो मुझे उम्मीद है कि आपको अतिरिक्त क्रेडिट मिलेगा।

एल्गोरिथ्म का सार यह है:

  • स्ट्रिंग को दो में काटें।
  • पुनरावर्ती कॉल के साथ, स्ट्रिंग के पहले आधे हिस्से को विभाजित करें।
  • पुनरावर्ती कॉल के साथ, स्ट्रिंग के दूसरे छमाही को विभाजित करें।
  • पहले छमाही से टुकड़ों को दूसरे छमाही से टुकड़ों के साथ डालें, और वॉइलिया !

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

#!/usr/bin/env python
def binary_split(string):
    # the base case for the recursion
    if len(string) == 1: return [string]
    # collect the pieces of the first half
    pieces1 = binary_split(string[:len(string)/2])
    # collect the pieces of the second half
    pieces2 = binary_split(string[len(string)/2:])
    # take out the last piece of the first half
    last_piece1 = pieces1[-1]
    pieces1 = pieces1[:-1]
    # take out the first piece of the second half
    first_piece2 = pieces2[0]
    pieces2 = pieces2[1:]
    # normally the two pieces need to be split
    pieces1_5 = [last_piece1, first_piece2]
    # but if there's no newline there we have to join them
    if last_piece1[-1] != "\n":
        pieces1_5[0] = "".join(pieces1_5)
        pieces1_5[1:] = []
    # finished!!!
    return pieces1 + pieces1_5 + pieces2

import sys
string = sys.stdin.read()
print binary_split(string)

बेशक प्रदर्शन के बारे में सभी बयान फर्जी हैं। "सरल" एल्गोरिथ्म रैखिक या द्विघात हो सकता है जो इस बात पर निर्भर करता है कि आप इसकी व्याख्या कैसे करते हैं। "उन्नत" एल्गोरिथ्म है Θ (n × log (n)) (व्यवहार में रैखिक के बहुत करीब), लेकिन लड़का, लगातार सूची के पुनर्निर्माण के कारण गुणक निरंतर उच्च है (जो कार्यान्वयन को बढ़ावा देने के लिए कुछ हद तक जाता है )।

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


9

मूल दृश्य

IOइकाई ऐसा करने के लिए एक समारोह है!

Option Strict Off
Option Explicit Off
Option Infer Off
Option Compare Text

Module Module1
    Sub Main()
        Dim i = 0

        For Each line In split_into_lines(Console.In.ReadToEnd())
            i += 1
            Console.WriteLine("Line {0}: {1}", i, line)
        Next
    End Sub

    Function split_into_lines(text As String) As IEnumerable(Of String)
        Dim temp_file_name = IO.Path.GetTempFileName()
        IO.File.WriteAllText(temp_file_name, text)
        split_into_lines = IO.File.ReadLines(temp_file_name)
    End Function
End Module

9
प्रत्येक VB परिचय को दृढ़ता से मठों की एक ठोस समझ में स्थापित किया जाना चाहिए!
क्रिस्टोफर क्रेतुजिग

5

सी ++

                                                                                                                                                                                                                      #declare private public
#include <strstream>
using namespace std;

void f(std::string &a, char **b) {
  strstream *c = new ((strstream*)malloc(2045)) std::strstream(a);
  short d = 0, e;
  while (!!c.getline(d++[b], e));
}
  • लंबे समय से पदावनत का उपयोग करता है std::strstream
  • एक स्मृति रिसाव शुरू करने के लिए अपने रास्ते से बाहर चला जाता है
  • ब्लाइंडली मानती है कि 2045 बाइट्स धारण करने के लिए पर्याप्त होगी strstream
  • भयानक नाम
  • का असंगत उपयोग std::उपसर्ग
  • तार के लिए काम नहीं करता है
  • पूरी तरह से बफर overruns पर ध्यान नहीं देता
  • प्रोग्रामर्स की हॉलमार्क फर्स्ट लाइन शामिल है जो जानते हैं कि वे क्या कर रहे हैं
  • एक टिप्पणी के बिना भी शरीर खाली है
  • नौसिखिया-ट्रिपिंग अनुक्रमण

5

अजगर 3 (साफ और स्वच्छ)

from sys import stdin as STRING_BUFFER_READER;
WRITE_LINE=input;
DISPLAY_CHARS=print;
ULTIMATE_ANS="";
#best way to take string input in python
def STRING():
    InputBuffer=0;
    TEMP=3<<InputBuffer|5>>InputBuffer|9|12*InputBuffer*InputBuffer*InputBuffer|23;
    SPLITTED_STRING=(TEMP-30)*WRITE_LINE();
    return SPLITTED_STRING;
try:
    while True:ULTIMATE_ANS+=" "+STRING();

except KeyboardInterrupt: DISPLAY_CHARS(ULTIMATE_ANS);

2
यह अद्भुत है कि पायथन इसे कैसे स्वचालित रूप से पठनीय बनाता है।
Turion

रुको, नहीं #define? ;-)
एनी-मूस -Reate Monica

5

माणिक

वैसे आप पहले यह देखें कि आपको इसे इस तरह से कैसे बनाना है

s = "this\nis a\ntest\n"
arr = s.gsub(/\n/, ",")

अब आपको तत्वों को तार के रूप में रखना होगा

real_arr = arr.gsub(/(.*?),/, "'#{$1}',")

ओह, उस अंतिम अल्पविराम को भी हटा दें

actually_real_arr = real_arr.chop

ओह, भूल गए, आपको एक सरणी होने के लिए कोष्ठक लगाना होगा

definitely_the_real_arr = "[#{actually_real_arr}]"

अब बस स्ट्रिंग का उपयोग करें और आप कर रहे हैं

final_arr = eval(definitely_the_real_arr)

evilness:

  • स्पष्ट, का उपयोग नहीं split
  • बेकार नामों के साथ बेकार चर के टन
  • eval
  • इनपुट स्ट्रिंग में अनुगामी न्यूलाइन की आवश्यकता है
  • स्ट्रिंग है अगर काम नहीं करता है 'या,

इसको प्यार करो। वह भी क्या भाषा है?
तूरियन

@ तूर हाहा, उस सॉरी को भूल गया। यह रूबी है। संपादित करेंगे
दरवाज़े

@ टिप्पणी: रूबी होने की अपील की।
कोनराड बोरोस्की

(मुझ पर शर्म करो पायथन-केंद्रित व्यक्ति)
Turion

3
मुझे दैनिक आधार पर चर नाम मिलते हैं ...
Bojangles

4

लुआ

function split(str)
    local output = {}
    for _ in str:gmatch"\n" do
        table.insert(output, "pieces")
        table.insert(output, "pieces")
        table.insert(output, "pieces")
    end
    return output
end

उदाहरण इनपुट: "Hello\nworld\nstuff"
आउटपुट:{"pieces","pieces","pieces","pieces","pieces","pieces"}

ओह और मैं यह बताना भूल गया कि कोड हे (n ^ 2)


2
मुझे लगता है कि ओपी इसे आउटपुट को देखकर खारिज कर देगा
वसाई

1
@Wasi - हालांकि यह अभी भी एक कोड-ट्रोलिंग जवाब है, क्योंकि यह ओपी से पूछे जाने वाले प्रश्न को हल करता है, भले ही इसका मतलब यह न हो।
लियाम डावसन

4

Node.js

यह इतना सरल है, कोई भी प्रोग्रामर इसे कर सकता है -।
सबसे पहले हमें hostsफाइल को बदलना होगा ताकि .com, .net, .orgमैप को 127.0.0.1
और बाकी बुनियादी जावास्क्रिप्ट है जिसे कोई भी व्यक्ति नहीं समझ सकता है।

os = require('os');
function split(string) {
  var hosts;
  if(os.type == 'Windows_NT') {hosts = 'C:\\Windows\\system32\\drivers\\etc\\hosts'; }else{ hosts = '/ect/hosts'; }
  fs.writeFile(hosts, '127.0.0.1 com\n 127.0.0.1 org\n 127.0.0.1 net\n', function (err) {});
  return eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0.1(\'\\2\');',3,3,'string|split|n'.split('|'),0,{}))
}

बिलकुल :)


हाहा, महान पढ़ता है, लेकिन यह विभाजन फ़ंक्शन क्या है जिसका आप अंत में उपयोग करते हैं?
तूरियन

@Turion अंतिम पंक्ति string.split('/n');सैद्धांतिक छात्र को भ्रमित करने के लिए कहने का एक जटिल तरीका है :)।
C1D

4

माणिक

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

def SplitStr(string, char)
  quant = string.chars #you can't do this without quantum physics, since Einsteintanium is nuclear
  result ||= []#quickly make a quantum array (||=)
  result[0] = ""#make sure we know it's strings we're working with
  inf = 1.0/0 #we need infinity for this to work
  counter = 0
  (0..inf).first(quant.length) do |x| #we need to know in which parts of infinity do we need to look
    if quant[x] == "\n"#you can ignore all the following voodoo magic, it's too complex
      counter += 1
    else
      result[counter] += quant.to_a[x]
  end
  end
end
def split(string); SplitStr(string,"\n"); end

यह बुराई है क्योंकि:

  • गरीब जंजीर विकिरण विषाक्तता से डर जाएगा
  • एकमात्र भाग "वह अनदेखा कर सकता है" महत्वपूर्ण हिस्सा है
  • अनंत आलसी पर्वतमाला। मेरा मतलब था आ जाओ!

1
आपका SplitStrहमेशा नई बात से अलग होता है चाहे तर्क कुछ भी हो, यकीन नहीं होता अगर जानबूझकर
mniip

@ मणिप, यह एक खूबसूरत बग है। "हमें इसके लिए काम करने के लिए अनंतता चाहिए"
Turion

यह पूरी तरह से जानबूझकर है।

अनंत (आलसी) पर्वतमाला वास्तव में एक साफ सुथरी चाल है, मैं इसे वहां लगाने के लिए सिर्फ HAD हूं।

4

सी ++

C ++ प्रोग्रामिंग भाषा की शक्तिशाली नई विशेषताओं के लिए धन्यवाद, इसे मानक लाइब्रेरी का उपयोग करके आसानी से हल किया जा सकता है, न ही पहिया को फिर से आविष्कार करना याद रखें ।

#include <iostream>

// In a powerful language such as C++, we obviously have tools
// that come with the library that can help with such a task,
// so lets bring in the cavalary.
#include <map>
#include <vector>

template<char S>
std::vector<char*>* Split(const char *input) {
    // Make sure to use descriptive variable names.
    int numberOfSplitsInTheInput = 0;

    // We need to find the number of splits to make, so lets count them.
    // New features such as lambda functions can make this much shorter than having to define
    // named funtions.
    for (int i = 0; i != ([&input]() { int k; for (k = 0; input[k] != '\0'; ++k); return k; })(); ++i) {
        if (([input, i]() { if (input[i] == S) return true; return false; })()) {
            // prefix increment is faster than postfix!
            ++numberOfSplitsInTheInput;
        }
    }

    // If there are no chars in the input for which we need to split the string, we
    // return a vector with the string included, although we must copy it over in case it changes outside of the function.
    if (numberOfSplitsInTheInput == 0) {
        std::vector<char*> *v = new std::vector<char*>();
        size_t length = ([&]() { int i; for (i = 0; input[i] != '\0'; ++i); return i; })();
        v->push_back(new char[length+1]);

        // Copy each character.
        for (int i = 0; i != length; ++i) {
            memcpy(&((*v)[0][i]), &input[i], sizeof(char));
        }

        // Don't forget to set the terminating zero
        (*v)[0][length] = '\0';
        return v;
    }

    // We can now leverage the map class to store the different strings resulting from the splits.
    // But first we need to allocate memory for them!
    char **strings = new char*[numberOfSplitsInTheInput];

    std::map<int, char *> splits;

    // Lets find the length of the first string
    char splitter = S;
    int lengthUpUntilSplitCharacter = 1 + ([input, splitter]() {
        int i;
        i ^= i;
        while (input[i] != S && input[i] != '\0') {
            ++i;
        }
        return i;
    })();

    // Now we need to copy the string over, but disregard the actual delimiter.
    strings[0] = new char[lengthUpUntilSplitCharacter - 1];

    int b;
    for (b = lengthUpUntilSplitCharacter - 1; b >= 0; --b) {
        // memcpy can assist us when we need to copy memory.
        memcpy(&(strings[0][b]), &input[b], sizeof(char));
    }

    // Dont forget to add the terminating zero!
    strings[0][lengthUpUntilSplitCharacter - 1] = '\0';

    // Next, insert the string into our map!
    splits.insert(std::make_pair(0, strings[0]));

    // Now we can actually use recursion to solve the problem!
    // This makes it look a bit more clever and shows you truly understand CS.
    std::vector<char*> *result = Split<S>(input + lengthUpUntilSplitCharacter);

    // We already have one string in our map.
    int i = 1;

    // We can now merge the results into our actual map!
    for (std::vector<char*>::iterator it = result->begin(); it != result->end(); ++it) {

        splits.insert(std::make_pair(i++, (*it)));
    }

    // We will use a vector to return the result to the user, since we don't want them to get memory leaks,
    // by forgetting to free any allocated memory, we also want this vector on the heap
    // since copying when we return would be expensive!
    std::vector<char*> *mySplits = new std::vector<char*>(splits.size());

    // Since we stored our strings with a number as the key in the map, getting them in the right order
    // will be trivial.
    int j = 0;
    while (splits.empty() == false) {
        std::map<int, char*>::iterator result = splits.find(j++);

        if (result != splits.end()) {
            int lengthOfString = ([&]() { 
                for (int z = 0; ; ++z) {
                    if (result->second[z] == '\0') return z;
                }
            })();

            (*mySplits)[result->first] = new char[lengthOfString+1];

            // Copy the string into the vector.
            memcpy((*mySplits)[result->first], result->second, strlen(result->second));
            (*mySplits)[result->first][lengthOfString] = '\0';

            splits.erase(result);
        }
    }

    return mySplits;
}



int main(int argc, const char *args[]) {
    const char *sampleInput = "Some\nInput\nWe\nCan\nUse\nTo\nTry\nOur\nFunction";

    std::vector<char*> splits = *Split<'\n'>(sampleInput);

    for (auto it = splits.begin(); it != splits.end(); ++it) {
        std::cout << *it << std::endl;
    }

    system("PAUSE");

    return 42;
}

संपादित करें: यह उत्तर स्पष्ट रूप से केवल एक तुच्छ कार्य के लिए कुछ मूर्खतापूर्ण जटिल बनाने का प्रयास करता है, और जब तक कोड लिखने में सक्षम होने के बावजूद मैं कर सकता था, तब तक कई साधनों का दुरुपयोग किया गया था।

यहां कुछ बातें ध्यान देने योग्य हैं:

  • टिप्पणियाँ कोड को फिर से उपयोग करने और मानक पुस्तकालय का उपयोग करने के बारे में बात करती हैं, std :: string का उपयोग नहीं किया जाता है।
  • हर उदाहरण के लिए जहां एक स्ट्रिंग की लंबाई की गणना करने की आवश्यकता होती है, एक नया लैम्ब्डा परिभाषित किया जाता है।
  • वास्तव में बिना किसी अच्छे कारण के टेम्पलेट का उपयोग करता है।
  • प्रत्येक उदासीन पत्र को कॉपी करने के लिए मेम्ची का उपयोग करता हैस्ट्रिंग्स में ।
  • मेमोरी लीक सभी जगह हैं, फिर भी वेक्टर लीक के बारे में टिप्पणी इस वर्ग पर निर्भर करती है कि मेमोरी लीक से बचने के लिए क्या करना चाहिए। यह इस वेक्टर को पॉइंटर द्वारा मेमोरी को ढेर करने के लिए भी लौटाता है।
  • एक वेक्टर की तरह उपयोग करते हुए, अस्थायी भंडारण के लिए मानचित्र वर्ग का उपयोग करता है।
  • शायद अधिक, मेरे सिर में दर्द होता है।
  • ओह, और पूरी बात पुनरावर्ती भी है।

3

सी#

यह नए सिरे को कॉमा में बदलने के लिए पुनरावर्तन की तकनीक का उपयोग करता है। परिणामस्वरूप CSV स्ट्रिंग को आसानी से एक सरणी में विभाजित किया जा सकता है।

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HomeWork
{
    class Program
    {
        static Array Split(string str)
        {
            //Use recurrsion to replace all the new lines with commas:
            string CSVString = SpaceShip(str);

            //Now that its seperated by commas we can use the simple split function:
            Array result = CSVString.Split(',');

            //Return the value:
            return result;
        }

        static string SpaceShip(string str)
        {
            if (str.Length >= System.Environment.NewLine.Length)
            {
                if (str.Substring(0, System.Environment.NewLine.Length) == System.Environment.NewLine)
                {
                    return "," + SpaceShip(str.Substring(System.Environment.NewLine.Length));
                }
                else
                {
                    return SpaceShip(str.Substring(0, 1)) + SpaceShip(str.Substring(1));
                }
            }
            else
            {
                return str;
            }
        }
    }
}

मैं वास्तव में, वास्तव में आशा करता हूं कि मैं इसे प्रोडक्शन में नहीं देखता। यह दुर्भाग्य से प्रशंसनीय है।
लियाम डावसन

@ dawnail333: और अन्य उत्तर अधिक उत्पादन के लिए तैयार हैं? यह केवल एक गंभीर बग है (जो मुझे पता है) :-)
प्रोक

@ अन्य, इनपुट स्ट्रिंग में अल्पविराम नहीं हो सकता है?
Turion

@ यात्रा: नो-कॉमास-इन-द-इनपुट बग केवल एक ही है जिसके बारे में मुझे पता है।
प्रहार करें

3

सी ++

अंतिम अभिव्यक्ति तक पूरी तरह से विश्वसनीय और पाठ्यपुस्तक लगती है। यह सही भी है, बस अपने शिक्षक को यह समझाने की कोशिश करें।

#include <string>
#include <vector>
#include <algorithm>

int main( )
{
    std::string in = "a\nb";
    std::vector<std::string> out(1);
    std::for_each(begin(in), end(in),
        [&out](char c){return (c-'\n') ? out.back() += c:out.emplace_back(); }
    );
}

बेशक इसका कोई औचित्य नहीं है std::for_each, लेकिन यह हमें एक मेमने का गलत इस्तेमाल करने की अनुमति देता है। यह लंबोदर ऐसा लगता है कि यह कुछ लौट रहा है, लेकिन वास्तव में यह नहीं है। टर्नरी ऑपरेटर सिर्फ साइड इफेक्ट के लिए है।


3

ठीक है! इसलिए अजगर की कुछ ज्ञात विशेषताओं के उपयोग से यह समस्या बहुत आसान हो जाती है, जिसमें #define स्टेटमेंट शामिल हैं (उन्होंने हाल ही में सी ++ से उन्हें पोर्ट किया था) और बिलिन क्लासेस पर तरीकों का स्वत: पंजीकरण।

#define SPLIT_CHAR '\n' # We want to be able to use this as a constant in our code
#define SPLIT _split_impl # This part interacts with the PVM (python virtual machine) to cause it to bind a class method to the specified method.

# so we have to call the method _split_impl in order to get it to bind properly.
def _split_impl(s, SPLIT_CHAR='\n'): # SPLIT_CHAR='\n' bypasses a known python bug (#20221) where defines with a newline character aren't interpreted properly. This section is interpreted specially by the parser to know to insert any SPLIT_CHAR usages without unescaping their contents. Hopefully this bug will be fixed soon.
    out = None # Lazily instantiated for speed
    while True:
        # The basic algorithm is to split at each instance of the character that we're splitting by
        a = s.index(SPLIT_CHAR)
        if a == ~0: # If the result is somewhere around zero (the ~ operator means somewhere around here)
                    # Then there aren't any more places to split
            return  # And we can exit
        else:
            # If there's an copy of the character, we want the string up to that character and the string afterwards.
            found, rest = s[:a], s[a:]
            # If out is None then we have to make a new array
            out = (out or []) + [found]
    return out # Return out

# Get the input line so that we can work with it
linein = input("Enter text")

# Because of the SPLIT define above, a 'split' method is added to all objects.
# So now we can use this on a string object to split it by a character!
lineout = linein.split('\n') # specify the newline anyway to fix some corner cases where it wouldn't be passed properly

import sys # We need the system library to send output
sys.stdout.write(str(lineout)) # Then give it to the user!

कितना अच्छा है?

व्याख्या

... यहाँ ट्रोलिंग की एक बहुत बड़ी सूची है।

  1. अजगर में #define स्टेटमेंट मौजूद नहीं हैं!
  2. वे विशेष रूप से स्वचालित रूप से निर्मित वर्गों पर पंजीकरण नहीं करते हैं।
  3. बाहर "आलसी त्वरित" है - जिसका वास्तव में मतलब कुछ भी नहीं है।
  4. प्रदान किए गए फ़ंक्शन में परिणाम में विभाजक शामिल होगा।
  5. प्रदान किए गए फ़ंक्शन में परिणाम का अंतिम तत्व शामिल नहीं होगा।
  6. हालांकि, ~ ऑपरेटर इस संदर्भ में बनाए जाने के बावजूद, ~ 0 -1 है जिसका अर्थ है कि लाइन वास्तव में काम करेगी।
  7. रिटर्न गड़बड़ है। वास्तविक जगह यह बिना मूल्य के ही वापस आ जाएगी।
  8. बग # 20221 नाम में "#define" के साथ एक वास्तविक अजगर बग है - लेकिन इसका इससे कोई लेना-देना नहीं है।
  9. इनपुट लाइन केवल एक ही लाइन हो सकती है ... और बस विभाजित करना काफी बेकार है क्योंकि इसमें नई लाइनें शामिल नहीं हो सकती हैं।
  10. प्रिंट के बजाय sys.stdout.write (str (x)) का उपयोग (x) चीजों को करने का एक बुरा तरीका है।
  11. "पायथन वर्चुअल मशीन" इस मामले में एक बनी-बनाई अवधारणा है। (इसके अलावा "वर्ग विधि" एक स्थिर विधि होगी, उदाहरण की विधि नहीं, ताकि भाग भी गलत हो)

वास्तव में, प्रोग्राम काम करता है (पायथन 3.3.0 में कम से कम, और सिंगल-लाइन इनपुट समस्या के अलावा) चीजों का एक गुच्छा के बाद से जो इसे ऐसा नहीं करता है जो यह कहता है कि यह वास्तव में काम करने के लिए गठबंधन करता है।


3

उद्देश्य योग्य

HAI
CAN HAZ STDIO?
    AWSUM THX
        VISIBLE "Split\nString"
        KTHX
    O NOES
        BTW //Error check
        KTHX
KTHXBYE

2

ANSI सी

यह एक मानक असाइनमेंट है जो हम सभी ने किया है। यह आम तौर पर स्वीकार किए जाते हैं।

#include <stdio.h>

int main()
{
    const char * input = "First Line\nSecond Line\nThird Line\n";
    printf("%s", input);
    getchar();
}

आपको विभाजित और प्रिंट करने के लिए सही फ़ंक्शन के साथ लाइब्रेरी को शामिल करने की आवश्यकता है। #include <stdio.h>

उस स्ट्रिंग को बनाएं जिसे आप विभाजित करना चाहते हैं: const char * input = "First Line\nSecond Line\nThird Line\n";ध्यान दें कि मैंने कैसे उपयोग किया थाconst कीवर्ड का कि प्रिंटफ का आपके इनपुट को बदलने का कोई मतलब नहीं है। यह महत्वपूर्ण है क्योंकि आप हमेशा कानूनी उद्देश्यों के लिए अपने मूल रूप में उपयोगकर्ताप्रिन का संरक्षण करना चाहते हैं।

printf("%s", input); सांत्वना आउटपुट में आप देख सकते हैं कि आप के लिए विभाजन है।

getchar(); जब आप आउटपुट का निरीक्षण करते हैं तो कंसोल को सुस्त रखने के लिए बस एक छोटी सी अतिरिक्त चाल है।

इनपुट: "First Line\nSecond Line\nThird Line\n"

आउटपुट बनाता है:

First Line
Second Line
Third Line

2

अजगर


हम इसे find()हर नई लाइन उदाहरण पर स्ट्रिंग को विभाजित करने के लिए पायथन की स्ट्रिंग विधि का उपयोग कर सकते हैं (ध्यान दें कि इनपुट स्ट्रिंग को हार्ड-कोड किया गया है input_str, लेकिन इसे कच्चे_इनपुट ()) से बदला जा सकता है:

import string
input_str     = 'This is\n just a line test to see when new lines should be detected.line'
output_pieces = []

while len(input_str) > 0:
    linepos = string.find(input_str, 'line')
    if linepos < 0:
        output_pieces.append(input_str)
        break
    else:
        if linepos > 0:
            output_pieces.append(input_str[0:linepos])
        input_str = input_str[(linepos+4):]

for piece in output_pieces:
    print piece

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

This is
 just a 
 test to see when new 
s should be detected.

2

PHP / जीडी

बंटवारे के तार बहुत जटिल मामला है। यद्यपि हम आगे बढ़े और इस महत्वपूर्ण होमवर्क मुद्दे के लिए एक बहुत ही बुनियादी कार्यान्वयन किया।

हाल के PHP संस्करण पर किसी भी निर्भरता के बिना चलता है: पोस्ट कोड में सीमित उदाहरणों की मात्रा के बाद से हमारे पास लगभग 40.000 वर्णों की एक चरित्र सीमा है जो प्रदर्शन स्ट्रिंग्स की एक सभ्य राशि फिट नहीं होती है।

उदाहरण संस्करण:

http://codepad.viper-7.com/YnGvCn

आपके विनिर्देशों की सटीक पुष्टि करता है।

<?PHP

/**
 * My homework assignment is take a string and split it into pieces at every new line. I have no idea what to do! Please help!
 * Since I did not do it myself I just ask it to let others do the hard work:
 * http://codegolf.stackexchange.com/questions/16479/how-do-i-split-a-string
 * 
 * Nice
 */

//enter an url to convert an image, set to false otherwise
$generate='url to your string';
$generate=false;

//->My homework assignment is
$boring=true;

//a simple convertor for jpegs:

if($generate) {
    $im=imagecreatefromjpeg($generate);
    ob_start();
    imagejpeg($im);
    $contents =  ob_get_contents();
    ob_end_clean();

    echo base64_encode($contents);
    exit;
}



//->take a string

//man, just one string, we can handle many strings!

$complex=<<<'EOT'
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
EOT;


//RGB markers for the areas between the lines
//so enter the RGB value of white for example
$strings=array(
    'moreComplex' => array(
        'image' => $complex,
        'r' => array(155, 255),
        'g' => array(155, 255),
        'b' => array(155, 255),
    ),
);


foreach($strings AS $stringStyle => $string) {
    echo '<a href="?string='.$stringStyle.'">'.ucfirst($stringStyle).'</a><p>';
}

//check for a selection 
if(empty($_GET['string']) OR !isset($strings[$_GET['string']])) {
    exit;
}

$activeString=$strings[$_GET['string']];

$stringSourceBase64 = $activeString['image'];

//that's better

$stringSource=base64_decode($stringSourceBase64);

$sizes=getimagesizefromstring($stringSource);

$width=$sizes[0];
$height=$sizes[1];

$measuringX=round($width*.5);

//load the image
$im = imagecreatefromstring($stringSource);

//starting point of detection
$detectedStartY=false;
$linesFound=array();

$lastEndedY=false;

//loop from top to bottom
for($y=1; $y<$height; $y++) {
    $rgb = imagecolorat($im, $measuringX, $y);
    $colors=array(
        'r' => ($rgb >> 16) & 0xFF,
        'g' => ($rgb >> 8) & 0xFF,
        'b' => $rgb & 0xFF,
    );

    foreach($colors AS $colorName => $colorValue) {


        //->and split it into pieces at every new line.
        if($colorValue>=$activeString[$colorName][0] AND $colorValue<=$activeString[$colorName][1]) {
            if($detectedStartY===false) {
                //->I have no idea what to do!
                //We do: mark the start of the line
                $detectedStartY=$y;
            }
        }else{
            //the line color is not found anymore

            //see if we already detected a line
            if($detectedStartY!==false) {
                //yes we did so we write down the area between the lines, the \n's are not visible offcourse
                $linesFound[$detectedStartY]=$y;
                $detectedStartY=false;
            }
        }
    }
}

//->Please help!
//sure, see the beautiful results:

//because we all love tables
echo '<table width="100%">';

    echo '<tr><td valign="top">'; //and we love inline styling, just so fast

        echo '<img src="data:image/png;base64, '.$stringSourceBase64.'" border=1 />';

    echo '</td><td valign="top">';

        //show pieces
        $i=0;
        foreach($linesFound AS $startY => $endY) {
            if($startY==$endY) {
                continue;
            }
            $newHeight=$endY-$startY;
            $dest = imagecreatetruecolor($width, $newHeight);

            // Copy
            imagecopy($dest, $im, 0, 0, 0, $startY, $width, $newHeight);

            // Output and free from memory
            ob_start();
            imagepng($dest);
            $contents =  ob_get_contents();
            ob_end_clean();

            echo '
                Part #'.$i.' of string <small>(y= '.$startY.' - '.$endY.'px)</small><br>
                <img src="data:image/png;base64, '.base64_encode($contents).'" border=1 />
                <p>
            ';

            imagedestroy($dest);

            $i++;
        }

        imagedestroy($im);

    echo '</td></tr>';
echo '</table>';

//images courtesty of:
//http://indulgy.net/cC/V8/MF/0002501105.jpg
//http://2.bp.blogspot.com/_JGIxXn5d7dc/TBbM2Zu8qRI/AAAAAAAAABE/8WlYvhPusO8/s320/thong4.jpg
//http://cdn.iofferphoto.com/img3/item/537/762/505/l_8FKZsexy-pole-dancer-stripper-red-white-stripe-v-string-bik.jpg
//
//http://stackoverflow.com/questions/2329364/how-to-embed-images-in-a-single-html-php-file

2
from random import randint

def splitstring(s):
    while len(s):
        n=randint(2,20)
        yield s[:n]
        s=s[n:]

astring="This is a string. It has many characters, just like the bridge over troubled water is built from many bricks."

for i in splitstring(astring):
    print i

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


मज़ा, लेकिन मैंने निर्दिष्ट किया कि मैं कहाँ चाहता हूं कि स्ट्रिंग विभाजित हो।
Turion

मैंने मूल रूप से प्रश्न को "कुछ मानदंडों द्वारा स्ट्रिंग को विभाजित करने और प्रत्येक भाग को एक नई लाइन पर प्रिंट करने" के रूप में पढ़ा।
नाइट्रोकेक 01

2

अजगर

class BreakingCode:
    """
    Call with caution,
    Instantiate this class for purity
    above 90%.
    """
    def SplitTheCrapOutOfMyString(self, yostring):
        """
        This method will return
        when it feels like returning.
        """
        print "Hey, how'you doin?"    # Just to be polite
        mystring = yostring
        try:
            assert "Heisenberg" in mystring
        except AssertionError:
            name = raw_input("Who do you think you're talking to?\n>>>")
            if name.startswith("H"):
                print "Yo, Mr.White"
        else:
            print "I'm the one who knocks"
        for eachword in mystring.split():
            print "{:_^40}".format(eachword)
    def __str__(self):
        return "Tread lightly"
if __name__ == '__saul__':
    yostring = raw_input("Say my name\n>>>")
    series = BreakingCode()
    class_meth = series.SplitTheCrapOutOfMyString(yostring)
    input()

2

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

बुरा हल

यह स्पष्ट समाधान है, जहां आप विभाजित करते हैं \nया \r\n:

जावा

String result = input.split("\n|\r\n");

पीएचपी

$result = preg_split('/\n|\r\n/', $input);

वह समाधान कचरा है और इसका उपयोग कभी नहीं किया जाना चाहिए। इस दिन और उम्र में, यूनिकोड से बचना व्यर्थ है, बल्कि हर प्रोग्रामर को इसे गले लगाना चाहिए और सुनिश्चित करना चाहिए कि आपका एप्लिकेशन यूनिकोड-तैयार है। यदि आप केवल \nया\r\n नई लाइन विभाजक के रूप में करते हैं, तो आप 90 के दशक में सॉफ्टवेयर लिख रहे हैं। इस यूनिकोड युग में, आपको U + 0085, U + 2028, U + 2029 को मान्य लाइन विभाजक मानना ​​होगा। चूंकि यूनिकोड को अभी और बाद में अपडेट किया गया है, और आमतौर पर यह अपडेट होने से पहले आपको लगता है कि कुछ समय लगता है, यूनिकोड में नई लाइन सेपरेटर जोड़ी जा सकती है। झल्लाहट नहीं, क्योंकि सभी नियमित अभिव्यक्ति इंजन यूनिकोड तैयार हैं, और उन्हें नियमित रूप से नवीनतम यूनिकोड मानक के अनुरूप अपडेट किया जाता है। इसलिए यदि आप एक व्याख्या की गई भाषा का उपयोग कर रहे हैं, तो आपका कोड बिना कुछ किए अप-टू-डेट हो जाएगा।

अनुशंसित समाधान

लाइन टर्मिनेटर द्वारा एक स्ट्रिंग को विभाजित करने के लिए, और यूनिकोड के विकास के साथ अद्यतित रहता है, रेगेक्स ^और निर्दिष्ट MULTILINEमोड की आपूर्ति करता है।

डिफ़ॉल्ट रूप से, ^केवल स्ट्रिंग की शुरुआत से मेल खाता है। में MULTILINEमोड, ^ भी लाइन, यानी एक लाइन टर्मिनेटर के बाद की शुरुआत से मेल खाता है।

उदाहरण के लिए:

जावा

String result = input.split("(?m)^");

पीएचपी

$result = preg_split('/^/m', $input);

ध्यान दें कि सामने एक अतिरिक्त खाली स्ट्रिंग प्रविष्टि है, बस इसे इंडेक्स 1 से हटाएं या लूप करें।


व्याख्या

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

  • विभिन्न रेगेक्स इंजन अलग-अलग सुविधाओं के सेट का समर्थन करते हैं। यदि लक्ष्य इंजन में वह सुविधा नहीं है जिसका उपयोग आप अपने regex में करते हैं, तो कोड को पोर्ट करना कॉपी और पेस्ट की तरह सरल नहीं है। समर्थित सुविधाओं के साथ अनुकरण करना संभव हो सकता है, या अकेले रेगेक्स के साथ ऐसा करना असंभव हो सकता है।
  • कर रहे हैं इंजन के 2 प्रकार पाठ निर्देशित इंजन (आटोमैटिक मशीन-आधारित) और regex निर्देशित इंजन (बैक ट्रैकिंग):। पूर्व रिटर्न सबसे लंबा सबसे लंबा स्ट्रिंग है, बाद वाला रिटर्न लेफ्टेस्ट बायस्ड स्ट्रिंग है (अन्वेषण के क्रम के लिए पक्षपाती, रेगेक्स द्वारा निर्दिष्ट)। एक ही रेगेक्स 2 प्रकार के इंजनों पर अलग-अलग परिणाम उत्पन्न कर सकता है।
  • यहां तक ​​कि एक ही फीचर के लिए, अलग रेगेक्स इंजन में इसे निर्दिष्ट करने के लिए अलग सिंटैक्स हो सकता है।
  • यहां तक ​​कि एक ही फीचर और एक ही सिंटैक्स के लिए, अलग रेगेक्स इंजन में पार्सिंग और मिलान में कुछ भिन्न व्यवहार हो सकता है। कीड़े एक तरफ, अंतर रेगेक्स इंजन के डिजाइन से आ सकता है (दस्तावेज हो सकता है या नहीं)।
  • में MULTILINEमोड, के व्यवहार ^और $"लाइन टर्मिनेटर 'की परिभाषा पर निर्भर है। जावा समझता है \r\n, \n, \r, \u0085, \u2028, \u2029लाइन टर्मिनेटर, जहां होने के लिए \r\nअनुक्रम परमाणु माना जाता है। जावास्क्रिप्ट समझता है \n, \r, \u2028, \u2029लाइन टर्मिनेटर्स किया जाना है। रूबी केवल \nलाइन टर्मिनेटर मानती है ।
  • splitकोने के मामलों के लिए फ़ंक्शन में विभिन्न भाषाओं में अलग-अलग शब्दार्थ हो सकते हैं। पायथन खाली मैचों में विभाजित नहीं होता है, जावा खाली तारों को हटा देता है (जब तक कि आप नकारात्मक सीमा निर्दिष्ट नहीं करते हैं), जावास्क्रिप्ट इंडेक्स 0 पर एक खाली स्ट्रिंग मैच पर विभाजित नहीं होता है।
  • "बुरा समाधान" वास्तव में "अनुशंसित समाधान" की तुलना में अधिक पोर्टेबल है। हालांकि, जिसे एक लाइन टर्मिनेटर माना जाना चाहिए, आप जो भी काम कर रहे हैं (जैसे सी स्रोत कोड) के विनिर्देश पर निर्भर करता है।
  • वर्तमान में, अधिकांश रेगेक्स इंजन स्तर 1 यूनिकोड समर्थन के अनुरूप नहीं हैं । उनके पास यूनिकोड गुण और ब्लॉक हो सकते हैं, लेकिन लाइन बाउंड्री सेक्शन के लिए कार्यान्वयन पूरे स्थान पर है, जैसा कि ऊपर बताया गया है। जावास्क्रिप्ट भी यूनिकोड वर्ण गुणों का समर्थन नहीं करता है!

1

बैश लिपि

new_string=`echo $string`

यह नए सिरे से स्ट्रिंग को विभाजित करता है। यदि आप गूँजते हैं$new_string , तो आप देखेंगे कि इसने नई लाइन को सरणी विभाजकों में बदल दिया है।

नमूना उत्पादन:

[glitchmr@guava ~]$ string=$'some\nnice\nstring'
[glitchmr@guava ~]$ echo "$string"
some
nice
string
[glitchmr@guava ~]$ new_string=`echo $string`
[glitchmr@guava ~]$ echo "$new_string"
some nice string
[glitchmr@guava ~]$

1

जावा

यह एक फ़ाइल से नहीं पढ़ता है। नियमित अभिव्यक्ति का उपयोग किया जाता है। कोड मानता है कि पढ़ी गई स्ट्रिंग में न्यूलाइन इंगित करने के लिए '\ n' वर्ण है। विभाजन को इंगित करने के लिए संख्या 1,2,3,4 का उपयोग किया जाता है।

public static void main(String args[])
{

    String strSource = "1.This is a string.This is a string.This is a string.This is a string.This is a string.\n2.This is a string.This is a string.This is a string.This is a string.This is a string.\n3.This is a string.This is a string.This is a string.This is a string.This is a string.\n4.This is a string.This is a string.This is a string.This is a string.This is a string.";
    String[] tokens = Pattern.compile("\n").split(strSource,10) ;
    for (int loop=0;loop<tokens.length;loop++)
        System.out.println(tokens[loop]);
}

1

सी#

static class Module1{
    public static void Main()
{
        dynamic i = 0;
        foreach (object line_loopVariable in split_into_lines(Console.In.ReadToEnd())) {
            line = line_loopVariable;
            i += 1;
            Console.WriteLine("Line {0}: {1}", i, line);
        }
    }
    public static IEnumerable<string> split_into_lines(string text){
        dynamic temp_file_name = System.IO.Path.GetTempFileName();
        System.IO.File.WriteAllText(temp_file_name, text);
        return System.IO.File.ReadLines(temp_file_name);
    }
}

1

आप निर्दिष्ट नहीं करते हैं कि आप जिस "नई लाइन" पर अपनी स्ट्रिंग को विभाजित करना चाहते हैं वह संवेदनशील या असंवेदनशील है। मैं असंवेदनशील हूं।

public class SplitStringAtNewline
{
  public static final String STRING_TO_SPLIT = "Hellonew lineWorld";
  public static void main (String [] args)
  {
     System.out.println (
        String.join("",
          Pattern.compile("[nN][eE][wW] [lL][iI][nN][eE]")
              .splitAsStream(STRING_TO_SPLIT)
              .map((s) -> s + "\n")
              .collect(() -> new ArrayList<>(),
                    (c, e) -> c.add(e), (c1, c2) -> c1.addAll(c2))));

  }
}

1

यार, यह Powershell में करने के लिए सुपर आसान है।

बस अपनी स्ट्रिंग इस तरह प्राप्त करें:

$string = "Helloworld!"

तब तक यादृच्छिक ascii पर लूप जब तक आप अपने स्ट्रिंग इस तरह दो में विभाजित है:

Do {
        1..($string.length+1) | % {$new_string+=[char](random (33..127))}
        rv new_string
} Until ($new_string -eq ($string.insert(($string.length/2)-1," ")))

अंततः आपको स्प्लिट स्ट्रिंग मिलनी चाहिए, जिसे आप इस तरह से आउटपुट कर सकते हैं:

Write-Host $new_string

आउटपुट:

नमस्ते दुनिया!


1

Php

<? Spliter($yourstring); ?>

यहां बताया गया है कि आप स्ट्रिंग को कैसे विभाजित करते हैं। क्या यह आसान नहीं है?

अब आपको केवल फ़ंक्शन लिखना है Spliter()


1

बैश विशिष्ट

लिए बहुत अच्छा काम है !

हाँ, विभाजन स्ट्रिंग वास्तव में सरल तरीके से किया जा सकता है:

string=$'foo\nbar\nbaz'

सबसे पहले आपको एक वैरिएबल को इनिशियलाइज़ करना होगा जिसका उपयोग आप अपने स्प्लिटेड रिजल्ट को स्टोर करने के लिए करेंगे:

declare -a lines

अब जैसे कि प्रत्येक लाइन को विभाजक के दो द्वारा सीमांकित किया जाता है , स्ट्रिंग की शुरुआत या अंत, आपको पहले एक को स्टोर करने के लिए एक चर की आवश्यकता होगी

limitA=0

ठीक है, अब आप विभाजक की खोज कर सकते हैं और लूप का उपयोग करके अपनी लाइनों को स्टोर कर सकते हैं । जैसा कि द्विआधारी मूल्य के साथ काम नहीं कर सकता, आप odनमूना के लिए हेक्साडेसिमल मानों के साथ काम करने के लिए उपकरण का उपयोग कर सकते हैं :

while read hexline
do
    addr=${hexline%% *}
    hexline="${hexline#$addr}"
    addr=$((16#$addr))
    for field in $hexline
    do
        if [ "$field" = "0a" ]
        then
            lines+=( "${string:limitA:addr-limitA}" )
            limitA=$(( addr + 1 ))
        fi
        ((addr++))
    done
done < <(od -A x -t x1 <<<"$string")

अब, हमारे पास एक विभाजित स्ट्रिंग है जिसे वेरिएबल में संग्रहीत किया गया है lines:

set | grep ^lines=
lines=([0]="foo" [1]="bar" [2]="baz")

हम इसका उपयोग करके प्रिंट कर सकते हैं:

for (( idx=0 ; idx < ${#lines[@]} ; idx++ ))
do
    echo ${lines[idx]}
done

यह सब एक स्क्रिप्ट में लाना:

#!/bin/bash

string=$'this is a very long string containing spaces\nshorted, but containing comas...\nthird line.'
declare -a lines
limitA=0
while read hexline
do
    addr=${hexline%% *}
    hexline="${hexline#$addr}"
    addr=$((16#$addr))
    for field in $hexline
    do
        if [ "$field" = "0a" ]
        then
            lines+=( "${string:limitA:addr-limitA}" )
            limitA=$(( addr + 1 ))
        fi
        ((addr++))
    done
done < <(od -A x -t x1 <<<"$string")

for (( idx=0 ; idx < ${#lines[@]} ; idx++ ))
do
    echo $idx: ${lines[idx]}
done

यह प्रिंट करेगा:

0: this is a very long string containing spaces
1: shorted, but containing comas...
2: third line.

आधुनिक बैश

लेकिन आधुनिक बैश कार्यान्वयन का उपयोग करते हुए , आप न्यूट्रल जैसे नियंत्रण चार्ट को चर में स्टोर कर सकते हैं , और यहां तक ​​कि उनका परीक्षण भी कर सकते हैं:

#!/bin/bash

string=$'foo\nbar\nbaz'
declare -a lines
limitA=0
for (( idx=0 ; idx < ${#string} ; idx++ ))
do

    if [ "${string:idx:1}" = $'\n' ]
    then

        lines+=( "${string:limitA:idx-limitA}" )
        limitA=$(( idx + 1 ))
    fi
done
lines+=( "${string:limitA}" )

for (( idx=0 ; idx < ${#lines[@]} ; idx++ ))
do
    echo ${lines[idx]}
done

बैश गोल्फ

लेकिन अगर आप पठनीयता की परवाह नहीं करते हैं, तो आप संघनित स्क्रिप्ट लिख सकते हैं जैसे:

IFS=$'\n' read -d'' -a lines <<<$'foo\nbar\nbaz'

गोल्फ स्क्रिप्ट के रूप में दिखाई दे सकते हैं:

#!/bin/bash

IFS=$'\n' read -d'' -a lines <<<$'foo\nbar\nbaz'
printf "%s\n" ${lines[@]}

और एक ही प्रभाव देगा: पहली पंक्ति विभाजित स्ट्रिंग और उन्हें एक नाम रेखा में स्टोर करती है । और दूसरी पंक्ति '' लाइनों '' के प्रत्येक सदस्य को मुद्रित करेगी , उसके बाद एक नई पंक्ति

बैश + वीटी कंसोल

लेकिन जितने लोग ANSI VT मानक के आधार पर टेक्स्ट कंसोल का उपयोग करते हैं , आप अपने कंसोल के VT व्यवहार का उपयोग कर सकते हैं और इसे फिर से लिख सकते हैं:

#!/bin/bash

echo $'foo\nbar\nbaz'

वही परिणाम देगा।

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