本文共 1064 字,大约阅读时间需要 3 分钟。
【问题描述】
从键盘输入两个有序字符串(其中字符按ASCII码从小到大排序
,并且不含重复字符
),将两字符串合并,要求合并后的字符串仍是有序的,并且重复字符只出现一次
,最后输出合并后的结果。
【输入形式】
分行从键盘输入两个有序字符串(每个字符串不超过50个字符)
【输出形式】
输出合并后的有序字符串
【输入样例】
abcdeg
bdfh
【输出样例】
abcdefgh
【样例说明】
输入两个有序字符串abcdeg
和bdfh
,输出合并后的有序字符串为abcdefgh
。
对于这道题我的思路是:利用两个库函数:sort()
,unique()
,先排序,再去重,用unique()拿到排序后的去重后的第一个重复数据的下标,将前面的不重复数据输出即可
对于
sort(): unique():sort()
,unique()
不熟悉的,可以参考文章:
首先需要储备一些必要的知识:
c_str()
strcpy()
我的代码实现如下:
#include#include #include #include 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;}
以上 ?
转载地址:http://bvden.baihongyu.com/