Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में n पंक्तियों में ज़िग-ज़ैग स्ट्रिंग का प्रिंट संयोजन


इस समस्या में, हमें एक स्ट्रिंग दी जाती है जो वर्णों का एक क्रम है। और हमें ज़िग-ज़ैग पैटर्न की लंबाई दी गई है और हमें इस ज़िग-ज़ैग स्ट्रिंग के कॉन्सटेनेशन स्ट्रिंग को n पंक्तियों में प्रिंट करना होगा।

आइए अवधारणा को बेहतर ढंग से समझने के लिए कुछ उदाहरण देखें,

उदाहरण

Input : string = ‘STUVWXYZ’ n = 2.
Output : SUWYTVXZ

स्पष्टीकरण - 2-पंक्ति पैटर्न के लिए स्ट्रिंग के लिए ज़िग-ज़ैग पैटर्न है -

S    U    W    Y
   T    V    X    Z

इस ज़िग-ज़ैग पैटर्न का संयोजन है - SUWYTVXZ।

उदाहरण

Input : string = ABCDEFGH n = 3
Output: ADGBEHCF

स्पष्टीकरण - तीन पंक्तियों वाली स्ट्रिंग के लिए ज़िगज़ैग पैटर्न है -

A    E
   B D F H
  C G

ज़िगज़ैग पैटर्न का संयोजन है - AEBDFHCG

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

इस अवधारणा के आधार पर आइए एक एल्गोरिथम प्राप्त करें जो समस्या को हल कर सकता है,

एल्गोरिदम

Step 1 : Take an array of string of size n, string arr[n], row for current row no. i.e. string in the array and the direction as 1(indicating downward traversal).
Step 2 : Traverse the string and follow step 3 - 7. For every character of the string.
Step 3 : Append the character to the current string in the array based on the value of row.
Step 4 : If row = n-1, direction = 1.
Step 5 : if row = 0, direction = -1.
Step 6 : if direction = 1, row++ .
Step 7 : else row--.
Step 8 : print all string on the array from 0 to n-1 in sequence.

उदाहरण

अब इस एल्गोरिथम के आधार पर हमारे समाधान को लागू करने के लिए एक प्रोग्राम बनाएं -

#include<bits/stdc++.h>
using namespace std;
void ZigZagConcatenationString(string str, int n){
   if (n == 1){
      cout << str;
      return;
   }
   int len = str.length();
   string arr[n];
   int row = 0;
   int direction = 1;
   bool down;
   for (int i = 0; i < len; ++i){
      arr[row].push_back(str[i]);
      if (row == n-1)
         direction = -1;
      else if (row == 0)
         direction = 1;
      (direction == 1)? (row++): (row--);
   }
   for (int i = 0; i < n; ++i)
      cout << arr[i];
}
int main(){
   string str = "ABCDEFGH";
   int n = 3;
   ZigZagConcatenationString(str, n);
   return 0;
}

आउटपुट

AEBDFHCG

  1. सी ++ में एक स्ट्रिंग को टोकन करना

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

  1. सी ++ में एक स्ट्रिंग को टोकननाइज़ करें?

    पहला तरीका है, रिक्त स्थान से अलग किए गए शब्दों को पढ़ने के लिए एक स्ट्रिंगस्ट्रीम का उपयोग करना। यह थोड़ा सीमित है लेकिन यदि आप उचित जांच प्रदान करते हैं तो यह कार्य काफी अच्छी तरह से करता है। उदाहरण #include <vector> #include <string> #include <sstream> using namespace std; in

  1. पायथन - स्ट्रिंग सूची में वृद्धिशील स्लाइस संयोजन

    जब स्ट्रिंग सूची में वृद्धिशील स्लाइस संयोजन प्रदर्शित करने की आवश्यकता होती है, तो एक साधारण पुनरावृत्ति और सूची स्लाइसिंग का उपयोग किया जाता है। नीचे उसी का एक प्रदर्शन है - उदाहरण my_list = ['pyt', 'is', 'all', 'fun'] print("The list is :") print(my_lis