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

सी ++ में एक वाक्य में शब्दों को पुनर्व्यवस्थित करें

मान लीजिए कि हमारे पास अलग-अलग शब्दों के साथ एक स्ट्रिंग है, उस स्ट्रिंग को वाक्य कहा जाता है, और यह निम्न प्रारूप में है -

  • पहला अक्षर अपर केस में है।

  • टेक्स्ट के प्रत्येक शब्द को एक स्पेस कैरेक्टर द्वारा अलग किया जाता है।

हमें टेक्स्ट में शब्दों को इस तरह से पुनर्व्यवस्थित करना है कि सभी शब्दों को उनकी लंबाई के बढ़ते क्रम में पुनर्व्यवस्थित किया जाए। यदि दो शब्दों की लंबाई समान है, तो उन्हें उनके मूल क्रम में व्यवस्थित करें।

फिर अंत में इन नियमों को लागू करके स्ट्रिंग वापस करें।

इसलिए, यदि इनपुट "I love to code in cpp" जैसा है, तो आउटपुट "I to in cpp love code" होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • टेक्स्ट के पहले अक्षर को छोटे अक्षर में बनाएं

  • एक सरणी परिभाषित करें x :=स्पेस का उपयोग करके टेक्स्ट को विभाजित करने के बाद सभी शब्दों को रखें

  • जोड़े की एक सरणी परिभाषित करें

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • s के अंत में {x[i],i} डालें

  • सरणी को लंबाई के आधार पर क्रमबद्ध करें, यदि लंबाई समान उपयोग सूचकांक मान हैं

  • रिट:=खाली स्ट्रिंग

  • इनिशियलाइज़ i:=0 के लिए, जब i <साइज़ ऑफ़ s, अपडेट (i से 1 तक बढ़ाएँ), करें -

    • ret :=ret s[i]

      . के पहले तत्व को संयोजित करता है
    • यदि i, s के आकार के बराबर नहीं है, तो -

      • ret :=रिक्त स्थान के साथ ret concatenate

  • रिट टू कैपिटल का पहला अक्षर बनाएं

  • वापसी रिट

उदाहरण

आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   vector <string> split(string& s, char delimiter){
      vector <string> tokens;
      string token;
      istringstream tokenStream(s);
      while(getline(tokenStream, token, delimiter)){
         tokens.push_back(token);
      }
      return tokens;
   }
   static bool cmp(pair <string, int>& a, pair <string, int>& b){
      if(a.first.size() != b.first.size()) return a.first.size() < b.first.size();
         return a.second < b.second;
   }
   static bool a(string& a, string& b){
      return a.size() < b.size();
   }
   string arrangeWords(string text) {
      text[0] += 'a' - 'A';
      vector<string> x = split(text, ' ');
      vector<pair<string, int> > s;
      for (int i = 0; i < x.size(); i++)
      s.push_back({ x[i], i });
      sort(s.begin(), s.end(), cmp);
      string ret = "";
      for (int i = 0; i < s.size(); i++) {
         ret += s[i].first;
         if (i != s.size() - 1)
            ret += ' ';
      }
      ret[0] += 'A' - 'a';
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.arrangeWords("I love to code in cpp"));
}

इनपुट

"I love to code in cpp"

आउटपुट

I to in cpp love code

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

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

  1. पायथन प्रोग्राम में शब्दों को एक वाक्य में गिनें

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

  1. एक वाक्य में शब्दों को गिनने के लिए पायथन प्रोग्राम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन हमें एक वाक्य दिया गया है, हमें वाक्य में शब्दों की संख्या गिनने की जरूरत है यहां हम दो दृष्टिकोणों पर चर्चा करेंगे - दृष्टिकोण 1 - विभाजन () फ़ंक्शन का उपयोग करना उदाहरण test_string = "Tuto