码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-11 23:15:29      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

按照指定规则对输入的字符串进行处理。

详细描述:

将输入的两个字符串合并。

对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。

对排训后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’; 如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。

 

举例:输入str1为"dec",str2为"fab",合并为“decfab”,分别对“dca”和“efb”进行排序,排序后为“abcedf”,转换后为“5D37BF”

接口设计及说明:

/*

功能:字符串处理

输入:两个字符串,需要异常处理

输出:合并处理后的字符串,具体要求参考文档

返回:无

*/

void ProcessString(char* str1,char *str2,char * strOutput)

{

}

 

 

知识点 字符串,排序,位运算
运行时间限制 10M
内存限制 128
输入

输入两个字符串

输出

输出转化后的结果

样例输入 dec fab
样例输出 5D37BF

 

  1 #include<iostream>
  2 #include<string>
  3 using namespace std;
  4 
  5 char daoxu(char ch)
  6 {
  7     if((ch>=0&&ch<=9)||(ch>=A&&ch<=F)||(ch>=a&&ch<=f))
  8     {
  9         if(ch>=0&&ch<=9)
 10         {
 11             switch(ch)
 12             {
 13             case 0:
 14                 return 0;
 15             case 1:
 16                 return 8;
 17             case 2:
 18                 return 4;
 19             case 3:
 20                 return C;
 21             case 4:
 22                 return 2;
 23             case 5:
 24                 return A;
 25             case 6:
 26                 return 6;
 27             case 7:
 28                 return E;
 29             case 8:
 30                 return 1;
 31             case 9:
 32                 return 9;
 33             }
 34         }
 35         if(ch>=A&&ch<=F)
 36         {
 37             switch(ch)
 38             {
 39             case A:
 40                 return 5;
 41             case B:
 42                 return D;
 43             case C:
 44                 return 3;
 45             case D:
 46                 return B;
 47             case E:
 48                 return 7;
 49             case F:
 50                 return F;
 51             }
 52         }
 53         if(ch>=a&&ch<=f)
 54         {
 55             switch(ch)
 56             {
 57             case a:
 58                 return 5;
 59             case b:
 60                 return D;
 61             case c:
 62                 return 3;
 63             case d:
 64                 return B;
 65             case e:
 66                 return 7;
 67             case f:
 68                 return F;
 69             }
 70         }
 71     }
 72     else
 73         return ch;
 74 }
 75 
 76 void paixu(string& str)
 77 {
 78     int len=str.size();
 79     if(len==1)
 80         return ;
 81     for(int i=0;i<len-1;i++)
 82         for(int j=i+1;j<len;j++)
 83             if(str[i]>str[j])
 84             {
 85                 char temp=str[i];
 86                 str[i]=str[j];
 87                 str[j]=temp;
 88             }
 89     return;
 90 }
 91 
 92 string ProcessString1(string& str)
 93 {
 94     int i=0;
 95     string str1=str;
 96 
 97     if(str1.empty())
 98         return str1;
 99 
100     int len=str1.size();
101 
102     if(len==1)
103     {
104         str1[0]=daoxu(str1[0]);
105         return str1;
106     }
107 
108     if(len==2)
109     {
110         str1[0]=daoxu(str1[0]);
111         str1[1]=daoxu(str1[1]);
112         return str1;
113     }
114 
115     string str2,str3;
116     for(int i=0;i<len;i+=2)
117         str2.push_back(str1[i]);
118     paixu(str2);
119     for(int i=1;i<len;i+=2)
120         str3.push_back(str1[i]);
121     paixu(str3);
122 
123     if(len%2==0)
124     {
125         str1.clear();
126         int len_str2=str2.size();
127         for(int i=0;i<len_str2;i++)
128         {
129             str1.push_back(str2[i]);
130             str1.push_back(str3[i]);
131         }
132     }
133 
134     if(len%2!=0)
135     {
136         str1.clear();
137         int len_str3=str3.size();
138         for(int i=0;i<len_str3;i++)
139         {
140             str1.push_back(str2[i]);
141             str1.push_back(str3[i]);
142         }
143         str1.push_back(str2[str2.size()-1]);
144     }
145 
146     for(int i=0;i<len;i++)
147         str1[i]=daoxu(str1[i]);
148     return str1;
149 }
150 
151 int main()
152 {
153     string s;
154     getline(cin,s);
155     int i;
156     int len_s=s.size();
157     for(i=0;i<len_s;i++)
158     {
159         if(s[i]== )
160             break;
161     }
162     
163     for(int j=i;j<len_s-1;j++)
164         s[j]=s[j+1];
165 
166     string str;
167     for(int i=0;i<len_s-1;i++)
168         str.push_back(s[i]);
169 
170     str=ProcessString1(str);
171     cout<<str<<endl;
172 
173     system("pause");
174 }

 

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

标签:

原文地址:http://www.cnblogs.com/yanliang12138/p/4722551.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!