Computer >> Máy Tính >  >> Lập trình >> C ++

Sắp xếp lại các từ trong một câu trong C ++

Giả sử chúng ta có một chuỗi với các từ khác nhau, chuỗi đó được gọi là câu và nó có định dạng sau -

  • Chữ cái đầu tiên là chữ hoa.

  • Mỗi từ trong văn bản được phân tách bằng một ký tự khoảng trắng.

Chúng ta phải sắp xếp lại các từ trong văn bản sao cho tất cả các từ được sắp xếp lại theo thứ tự độ dài tăng dần của chúng. Nếu hai từ có cùng độ dài, hãy sắp xếp chúng theo thứ tự ban đầu.

Sau đó, cuối cùng trả về chuỗi bằng cách áp dụng các quy tắc này.

Vì vậy, nếu đầu vào là "Tôi thích viết mã trong cpp", thì đầu ra sẽ là "Tôi thích viết mã trong cpp"

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • biến ký tự đầu tiên của văn bản thành ký tự nhỏ

  • Xác định một mảng x:=đặt tất cả các từ sau khi tách văn bản bằng cách sử dụng dấu cách

  • Xác định một mảng s gồm các cặp

  • để khởi tạo i:=0, khi i

    • chèn {x [i], i} vào cuối s

  • sắp xếp mảng s dựa trên độ dài, nếu độ dài bằng nhau, hãy sử dụng các giá trị chỉ mục

  • ret:=chuỗi trống

  • để khởi tạo i:=0, khi i

    • ret:=ret nối phần tử đầu tiên của s [i]

    • nếu tôi không bằng kích thước của s, thì -

      • ret:=ret nối với khoảng trống

  • đặt ký tự đầu tiên của ret thành viết hoa

  • trả lại ret

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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"));
}

Đầu vào

"I love to code in cpp"

Đầu ra

I to in cpp love code