输入一个字符串(包括大小写字母和空格),除去空格输出在字符串中出现过的字符。

输入格式:

输入一个字符串

输出格式:

输出在字符串中出现过的字符,每个字符打印一次,按字母顺序打印(注意:空格不算,大小写字符算不同字符)。打印时按字母的顺序,大写在前,小写在后。

输入样例:

在这里给出一组输入。例如:

1
This is a good hat

输出样例:

在这里给出相应的输出。例如:

1
Tadghiost

思路

getline(cin,s)接收一行字符串,可以接收空格并输出

遍历一遍erase函数删除空格

大小写字母ASCII码范围:a-z:97-122 A-Z:65-90

因题目要求打印时按字母的顺序,大写在前,小写在后,

所以用sort函数根据字母ASCII码值排序,可得:Taadghhiioosst

因每个字符打印一次,所以删除排序后相邻的重复字符即可

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
string s;
getline(cin,s);
for(int i=0;i<s.size();i++){
if(s[i]==' ') s.erase(i,1);
}
sort(s.begin(),s.end());
char pre=' ';
for(int i=0;i<s.size();i++){
if(s[i]!=pre) cout<<s[i];
pre=s[i];
}
return 0;
}

另一种方法:标记

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>

using namespace std;

int main() {
string str;
getline(cin,str);
bool book[200]={false};//初始均为false
for(char it:str){//记录出现得字符
book[(int)it]=true;
}
for(int i='A';i<='Z';i++){//先输出大写字母
if(book[i]){
printf("%c",i);
}
}
for(int i='a';i<='z';i++){//在输出小写字母
if(book[i]){
printf("%c",i);
}
}
return 0;
}