初级守护
大佬们好,我第一次在问答发布问题,如果有不对的地方还请指正,谢谢!
请问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;
}
望大佬给予指点!
新手天翼
我用你的(第一个)代码AC了
改了2个地方
1:是for循环的遍历(大写字母和小写字母输出的循环)
老师怎么说的 字符串遍历从0~字符串长度-1 而你呢从 0~字符串长度
相当于最后一个字母没遍历
2:是char类型的两个数组 题目怎么说的 字符串长度最大不超过50000
if(char数组<=50000)
cout<<"Runtime Error";
懂不懂?
数组要定义的比50000大一点50005就行了
打字不易
望采纳
初级守护
第一种方法超时了,第二种方法编译错误,在判断输入的这个字符是不是为空(是否输入结束)这里有错,希望有大佬能提出修改意见。
只要给出两种方法中任意一种的修改意见就可以了,本蒟蒻在这里感谢大佬们~非常感谢
初级守护
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;
}
@高子健 能再看一下吗,谢谢