3021. 字符排序

10175102128
void solve() {
    vector<char*> alpha;
    string line;
    getline(cin, line);
    for (auto &e : line)
        if (isalpha(e))
            alpha.push_back(&e);
    for (int i = 0; i < alpha.size(); i++)
        for (int j = i+1; j < alpha.size(); j++)
            if (*alpha[i] > *alpha[j])
                swap(*alpha[i], *alpha[j]);
    cout << line << endl;
}
Fifnmar

我的想法和 @10175102128 比较像。另外他启发了我,以后可以只发核心代码,不然太冗余了。

string str; getline(cin, str);
vector<char> vec;
for (auto ch : str)
        if (isupper(ch))
                vec.push_back(ch);
sort(vec.begin(), vec.end());
uint32_t i = 0;
for (auto ch : str)
    putchar(isupper(ch) ? vec[i++] : ch);
putchar('\n');
lnu_cxn

int main() {
string s;
int t, count = 0;
cin >> t;
getchar();
while (t–) {
getline(cin, s);
int len = s.size();
for(int i=0;i<len-1;i++)
for(int j=i+1;j<len;j++)
if (s[i] <= ‘Z’ && s[i] >= ‘A’ && s[i] > s[j] && s[j] <= ‘Z’ && s[j] >= ‘A’) {
char temp = s[i];
s[i] = s[j];
s[j] = temp;
}
cout << “case #” << count++ << “:\n” << s << endl;
}
return 0;
}

lnu_cxn

粘窜行了

kukusugar
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    string str,word;
    int n,i,j,k;
    cin>>n;
    getchar();
    for(i=0;i<n;i++){
        getline(cin,str);
        for(j=0;j<str.size();j++){
            if(str[j]>='A'&&str[j]<='Z'){
                word.insert(word.end(),str[j]);
                str[j]='*';
            }
        }
        sort(word.begin(),word.end());
        k=0;
        for(j=0;j<str.size();j++){
            if(str[j]=='*'){
                str[j]=word[k];
                k++;
            }
        }
        printf("case #%d:\n",i);
        cout<<str<<endl;
        str.clear();
        word.clear();
    }
    return 0;
}
zzpzbl

用c的话好像还只能gets,fgets自动加了个换行,就会导致结果不对

你当前正在回复 博客/题目
存在问题!