用C ++重新排列句子中的单词

假设我们有一个包含不同单词的字符串,该字符串称为句子,其格式如下:

  • 首字母大写。

  • 文本中的每个单词都由一个空格字符分隔。

我们必须重新排列文本中的单词,以使所有单词都按照其长度的增加顺序重新排列。如果两个单词的长度相同,请按其原始顺序排列它们。

然后最后通过应用这些规则返回字符串。

因此,如果输入就像“我喜欢用cpp编写代码”,那么输出将是“我喜欢cpp编写代码”

为了解决这个问题,我们将遵循以下步骤-

  • 将文字的第一个字符变成小写字母

  • 定义一个数组x:=将所有单词用空格分割后

  • 定义成对的数组

  • 对于初始化i:= 0,当i <x的大小时,更新(将i增加1),执行-

    • 在s的末尾插入{x [i],i}

  • 根据长度对数组进行排序,如果长度相同,则使用索引值

  • ret:=空字符串

  • 对于初始化i:= 0,当i <s的大小时,更新(将i增加1),执行-

    • ret:= ret与空白连接

    • ret:= ret连接s [i]的第一个元素

    • 如果i不等于s的大小,则-

  • 重返首都

  • 返回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

以上是 用C ++重新排列句子中的单词 的全部内容, 来源链接: utcz.com/z/316083.html

回到顶部