【问题描述】
从键盘输入两个有序字符串(其中字符按ASCII码从小到大排序
,并且不含重复字符
),将两字符串合并,要求合并后的字符串仍是有序的,并且重复字符只出现一次
,最后输出合并后的结果。
【输入形式】
分行从键盘输入两个有序字符串(每个字符串不超过50个字符)
【输出形式】
输出合并后的有序字符串
【输入样例】
abcdeg
bdfh
【输出样例】
abcdefgh
【样例说明】
输入两个有序字符串abcdeg
和bdfh
,输出合并后的有序字符串为abcdefgh
。
对于这道题我的思路是:利用两个库函数:sort()
,unique()
,先排序,再去重,用unique()拿到排序后的去重后的第一个重复数据的下标,将前面的不重复数据输出即可
对于
sort()
,unique()
不熟悉的,可以参考文章:
sort(): C++排序函数sort
unique(): 超简单C++去重排序
首先需要储备一些必要的知识:
- C风格字符串和C++风格字符串转换:
c_str()
- 复制字符串的函数:
strcpy()
我的代码实现如下:
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
int i;
string s1;
string s2;
cin >> s1;
cin >> s2;
// 字符串连接
s1 += s2;
// 储存连接后的字符串长度
const int length = s1.size();
// 对字符串排序
sort(s1.begin(), s1.end());
// 这两行代码可以用下面注释掉的代码代替,但不推荐
// 将C++风格的字符串s1,转换为C风格的字符串,并存入数组t
char t[length];
strcpy(t, s1.c_str());
// const char* p = s1.c_str();
// for (i = 0; i < length; i++)
// t[i] = p[i];
// 去重,拿到第一个重复数据的下标
int n = unique(t, t + length) - t;
// 将前面不重复的数据输出
for (i = 0; i < n; i++)
cout << t[i];
return 0;
}
以上 ?
还没有人抢沙发呢~