C++ 中重新排列句子中的單詞
假設我們有一個包含不同單詞的字串,該字串稱為句子,並且格式如下:
第一個字母大寫。
文字中的每個單詞都用單個空格字元分隔。
我們必須重新排列文字中的單詞,以便所有單詞按其長度的升序排列。如果兩個單詞長度相同,則按其原始順序排列。
然後最終根據這些規則返回字串。
因此,如果輸入類似於“I love to code in cpp”,則輸出將為“I to in cpp love code”。
為了解決這個問題,我們將遵循以下步驟:
將文字的第一個字元轉換為小寫。
定義一個數組 x:使用空格將文字拆分後,將所有單詞放入其中。
定義一個包含鍵值對的陣列 s。
初始化 i := 0,當 i < x 的大小,更新(i 增加 1),執行:
在 s 的末尾插入 {x[i],i}。
根據長度對陣列 s 進行排序,如果長度相同,則使用索引值。
ret := 空字串。
初始化 i := 0,當 i < s 的大小,更新(i 增加 1),執行:
ret := ret 連線 s[i] 的第一個元素。
如果 i 不等於 s 的大小,則:
ret := 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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP