问题标题: 酷町堂:3857 请问如何改正

0
0
已解决
刘廷钰
刘廷钰
初级守护
初级守护

大佬们好,我第一次在问答发布问题,如果有不对的地方还请指正,谢谢!

请问3857 收拾整理字符串这题如何改正:

3857   收拾整理字符串

题目描述 Description

输入一个字符串(不超过50000位),将其中的大写字母按照从大到小的顺序输出,小写按照从小到大输出。

输入描述 Input Description

一行,一个字符串s

输出描述 Output Description

两行,第一行将字符串s中的大写字母从大到小输出,用空格隔开
第二行将字符串s中的小写字母从小到大输出,用空格隔开

样例输入 Sample Input


 

dghssdffjJHG21568

样例输出 Sample Output


 

J H G
d d f f g h j s s

 

刘廷钰在2020-08-29 22:15:24追加了内容

附上错误代码(WA10分):

#include<iostream>
#include<cstdio> 
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
string s;
int cntd,cntx,pos,pos2;
char dx[50000],xx[50000];
bool cmpd(char x,char y){
    return x>y;
}
bool cmpx(char x,char y){
    return x<y;
}
int main(){
    getline(cin,s);
    int z=s.size();
    for(int i=0;i<=s.size()-1;i++){
        if(s[i]>='A'&&s[i]<='Z'){
            dx[i]=s[i];
            cntd++;
        }
        else if(s[i]>='a'&&s[i]<='z'){
            xx[i]=s[i];
            cntx++;
        }
    }
    sort(dx+0,dx+z,cmpd);
    sort(xx+0,xx+z,cmpx);
    for(int i=0;i<=z;i++){
        if(dx[i]>='A'&&dx[i]<='Z'){
            cout<<dx[i]<<" ";
        }
    }
    cout<<endl;
    for(int i=0;i<=z;i++){
        if(xx[i]>='a'&&xx[i]<='z'){
            cout<<xx[i]<<" ";
        }   
    }
return 0;
}

换了一种思路写,报错了,也发上来看看吧:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
char t;
int dx[50000],xx[50000],cnt;
int s[50000];
int main(){
    while(t!=''){
        cin>>t;    
            if(t>='A'&&t<='Z'){
                dx[(int)t++];
            }
            else if(t>='a'&&t<='z'){
                xx[(int)t++];
            }
    }
      for(int i=90;i>=65;i--){
        if(dx[i]!=0){
            cout<<i<<" ";
        }
    }
    for(int i=97;i<=122;i++){
        if(xx[i]!=0){
            cout<<i<<" ";
        }
    }
    return 0; 
}

望大佬给予指点!


1
已采纳
高子健
高子健
新手天翼
新手天翼

我用你的(第一个)代码AC了

改了2个地方

1:是for循环的遍历(大写字母和小写字母输出的循环)

老师怎么说的 字符串遍历从0~字符串长度-1 而你呢从 0~字符串长度

相当于最后一个字母没遍历

2:是char类型的两个数组 题目怎么说的 字符串长度最大不超过50000

if(char数组<=50000)

cout<<"Runtime Error";

懂不懂?

数组要定义的比50000大一点50005就行了

 

 

打字不易

望采纳

 

0
刘廷钰
刘廷钰
初级守护
初级守护

第一种方法超时了,第二种方法编译错误,在判断输入的这个字符是不是为空(是否输入结束)这里有错,希望有大佬能提出修改意见。

只要给出两种方法中任意一种的修改意见就可以了,本蒟蒻在这里感谢大佬们~非常感谢

0
高梓荣
高梓荣
新手天翼
新手天翼

明天初中报道,还有人没睡

正解桶排

0
刘廷钰
刘廷钰
初级守护
初级守护

WA:

#include<iostream>
#include<cstdio> 
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
string s;
int cntd,cntx,pos,pos2;
char dx[50005],xx[50005];
bool cmpd(char x,char y){
    return x>y;
}
bool cmpx(char x,char y){
    return x<y;
}
int main(){
    getline(cin,s);
    int z=s.size();
    for(int i=0;i<=s.size()-1;i++){
        if(s[i]>='A'&&s[i]<='Z'){
            dx[i]=s[i];
            cntd++;
        }
        else if(s[i]>='a'&&s[i]<='z'){
            xx[i]=s[i];
            cntx++;
        }
    }
    sort(dx+0,dx+z,cmpd);
    sort(xx+0,xx+z,cmpx);
    for(int i=0;i<=z-1;i++){
        if(dx[i]>='A'&&dx[i]<='Z'){
            cout<<dx[i]<<" ";
        }
    }
    cout<<endl;
    for(int i=0;i<=z-1;i++){
        if(xx[i]>='a'&&xx[i]<='z'){
            cout<<xx[i]<<" ";
        }   
    }
return 0;
}

@高子健  能再看一下吗,谢谢

0
刘廷钰
刘廷钰
初级守护
初级守护

感谢各位大佬回答,现在已经用其他方法做出了,结帖

@高子健 谢谢回答,打字不易,采纳你啦

我要回答