Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จัดเรียงคำในประโยคใหม่ในภาษา C++


สมมติว่าเรามีสตริงที่มีคำต่างกัน สตริงนั้นเรียกว่าประโยค และอยู่ในรูปแบบต่อไปนี้ -

  • อักษรตัวแรกเป็นตัวพิมพ์ใหญ่

  • แต่ละคำในข้อความคั่นด้วยอักขระเว้นวรรคหนึ่งตัว

เราต้องจัดเรียงคำในข้อความใหม่เพื่อให้คำทั้งหมดถูกจัดเรียงใหม่โดยเรียงตามความยาวที่เพิ่มขึ้น หากคำสองคำมีความยาวเท่ากัน ให้จัดเรียงตามลำดับเดิม

จากนั้นจึงคืนค่าสตริงโดยใช้กฎเหล่านี้

ดังนั้น หากอินพุตเป็นเหมือน "ฉันชอบเขียนโค้ดใน cpp" ผลลัพธ์จะเป็น "ฉันชอบโค้ดใน cpp"

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ทำให้อักขระตัวแรกของข้อความเป็นตัวพิมพ์เล็ก

  • กำหนดอาร์เรย์ x :=ใส่คำทั้งหมดหลังจากแยกข้อความโดยใช้ช่องว่าง

  • กำหนดอาร์เรย์ของคู่

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • ใส่ {x[i],i} ต่อท้าย s

  • จัดเรียงอาร์เรย์ตามความยาว หากความยาวเท่ากัน ให้ใช้ค่าดัชนี

  • ret :=สตริงว่าง

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • ret :=ret เชื่อมองค์ประกอบแรกของ s[i]

    • ถ้าฉันไม่เท่ากับขนาดของ s แล้ว −

      • ret :=ret เชื่อมกับช่องว่าง

  • สร้างอักษรตัวแรกของ ret เป็นตัวพิมพ์ใหญ่

  • รีเทิร์น

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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