华为训练题:中级——字符串排序(查找)

编写一个程序,将输入字符串中的字符按如下规则排序。

规则1:英文字母从A到Z排列,不区分大小写。

如,输入:Type 输出:epTy

规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。

如,输入:BabA 输出:aABb

规则3:非英文字母的其它字符保持原来的位置。

如,输入:By?e 输出:Be?y

样例:

输入:

A Famous Saying: Much Ado About Nothing(2012/8).

输出:

A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

思路:这题我的思路是先将字符串中的字母都取出来,放到另外一个string中,然后在这个string中进行排序,

再将排好序的字符赋值给之前那个string中,覆盖掉对应的那些字母。

这其中由于字母不区分大小写,而且相同的要按之前的·顺序,我开始用冒泡做,结果发现错了

之后就想到用查找再插入的方法,遍历26遍,从a到z,依次找出后尾部插入到一个字符串中。

下面是AC的代码

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4
 5 void sorted2(string &str)
 6 {
 7     string str1;
 8     int len=str.size();
 9     for(int i=0;i<26;i++)
10     {
11         for(int j=0;j<len;j++)
12             if(str[j]==(‘A‘+i)||str[j]==(‘a‘+i))
13                 str1.push_back(str[j]);
14     }
15     str=str1;
16 }
17 /*
18 void sorted(string &str)
19 {
20     if(str.empty())
21         return;
22     int len=str.size();
23     if(str.size()==1)
24         return;
25     for(int i=0;i<len-1;i++)
26     {
27         for(int j=i+1;j<len;j++)
28         {
29             char a,b;
30             if(str[i]>=‘a‘&&str[i]<=‘z‘)
31                 a=str[i]-32;
32             else
33                 a=str[i];
34             if(str[j]>=‘a‘&&str[i]<=‘z‘)
35                 b=str[j]-32;
36             else
37                 b=str[j];
38
39             if(a>b)
40             {
41                 char temp;
42                 temp=str[i];
43                 str[i]=str[j];
44                 str[j]=temp;
45             }
46         }
47     }
48     return;
49 }
50 */
51 void ChangeWord(string &str)
52 {
53     if(str.empty()||str.size()==1)
54         return;
55     string str1;
56     for(string::iterator iter=str.begin();iter!=str.end();iter++)
57     {
58         if(((*iter)>=‘A‘&&(*iter)<=‘Z‘)||((*iter)>=‘a‘&&(*iter)<=‘z‘))
59             str1.push_back(*iter);
60     }
61     sorted2(str1);
62
63     int j=0;
64     for(string::iterator i=str.begin();i!=str.end();i++)
65         if((*i>=‘A‘&&*i<=‘Z‘)||(*i>=‘a‘&&*i<=‘z‘))
66         {
67             *i=str1[j];
68             j++;
69         }
70     return;
71 }
72
73 int main()
74 {
75     string str;//="A Famous Saying: Much Ado About Nothing";
76     getline(cin,str);
77     ChangeWord(str);
78     cout<<str<<endl;
79
80     //system("pause");
81 }
时间: 2024-12-17 12:32:00

华为训练题:中级——字符串排序(查找)的相关文章

华为编程题:字符串排序

题目描述 编写一个程序,将输入字符串中的字符按如下规则排序. 规则1:英文字母从A到Z排列,不区分大小写. 如,输入:Type 输出:epTy 规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列. 如,输入:BabA 输出:aABb 规则3:非英文字母的其它字符保持原来的位置. 如,输入:By?e 输出:Be?y 样例: 输入: A Famous Saying: Much Ado About Nothing(2012/8). 输出: A aaAAbc dFgghh: iimM nNn o

华为训练题:初级——合并字符串

按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在字符串中的位置. 对排训后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符.如字符为‘4’,为0100b,则翻转后为0010b,也就是2.转换后的字符为‘2’: 如字符为‘7’,为0111b,则翻转后为11

华为OJ在线软件训练题——删除字符串中出现次数最少的字符(中级)

删除字符串中出现次数最少的字符 描述: 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除. 输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 题目类别: 字符串 难度: 中级 分数:   运行时间限制: 10 Sec 内存限制: 128 MByte 阶段: 招聘管理 输入: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出: 删除字符串中出现次数最少的字符后的字符串. 样例输入: abcdd 样例输出: dd 对于此类题目,简

算法题:字符串排序

/* 一个字符数组,里面的字符可能是a - z.A - Z.0 - 9. 现在要求对数组进行排序,要求所有小写字符放在最前面, 所有大写字符放在中间,所有数字放在最后,而且各部分 内部分别有序. */ #include <iostream> #include <string.h> using namespace std; void Swap(char &a, char &b) { char temp = a; a = b; b = temp; } void Gria

华为训练题:初级——合并表记录(字典,简单题)

数据表记录包含表索引和数值.请对表索引相同的记录进行合并,合并后表记录为相同索引表的数值求和 先输入键值对的个数然后输入成对的index和value值,以换行符隔开 输出合并后的键值对(多行) 4 0 1 0 2 1 2 3 4 0 3 1 2 3 4 思路: 用一个map字典来做,每次输入一对时count下,发现不等于1时加入,发现等于1时在它上面++value 1 #include<iostream> 2 #include<map> 3 using namespace std;

华为训练题:初级——输入一行字符,分别统计(简单题)

下面是AC代码 1 #include<iostream> 2 #include<string> 3 #include<vector> 4 using namespace std; 5 6 7 vector<int> jishu(string& str) 8 { 9 int len=str.size(); 10 vector<int> vec; 11 int re1=0,re2=0,re3=0,re4=0; 12 for(int i=0;i

华为OJ训练题之 比赛情况统计

题目如下: 比赛情况统计 有一个游戏平台,各个参赛队伍(以唯一的TeamID来标识)之间进行单循环的对抗赛,两个队伍之间只举行一场比赛,比赛以得分的多少定胜负.需要完成一个统计赛况的程序,能够随时查询指定队伍的最新赛况:包括胜.平.负的局数,当前总积分以及名次. 说明:循环赛没有全部结束时也可以查询某个队伍的最新赛况 规则说明 比赛判定:两个队伍中得分高的一方为胜者,另一方为负者:得分相同则为平局 积分规则:每一局比赛: 胜者积3分;平局双方各积1分; 负者积0分 排名规则:按照当前总积分的高低

[华为]字符串排序

字符串排序 编写一个程序,将输入字符串中的字符按如下规则排序. 规则1:英文字母从A到Z排列,不区分大小写. 如,输入:Type 输出:epTy 规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列. 如,输入:BabA 输出:aABb 规则3:非英文字母的其它字符保持原来的位置. 如,输入:By?e 输出:Be?y 样例: 输入: A Famous Saying: Much Ado About Nothing(2012/8). 输出: A aaAAbc dFgghh: iimM nNn 

华为OJ 字符串排序

写完之后,总觉得有点复杂.. 要求: 编写一个程序,将输入字符串中的字符按如下规则排序. 规则1:英文字母从A到Z排列,不区分大小写. 如,输入:Type输出:epTy 规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列. 如,输入:BabA输出:aABb 规则3:非英文字母的其它字符保持原来的位置. 如,输入:By?e输出:Be?y 样例: 输入: A Famous Saying: Much Ado About Nothing(2012/8). 输出: A aaAAbc dFgghh: