纵有疾风起
人生不言弃

C++题目–合并字符串

【问题描述】

从键盘输入两个有序字符串(其中字符按ASCII码从小到大排序,并且不含重复字符),将两字符串合并,要求合并后的字符串仍是有序的,并且重复字符只出现一次,最后输出合并后的结果。

【输入形式】

分行从键盘输入两个有序字符串(每个字符串不超过50个字符)

【输出形式】

输出合并后的有序字符串

【输入样例】

abcdeg
bdfh

【输出样例】

abcdefgh

【样例说明】

输入两个有序字符串abcdegbdfh,输出合并后的有序字符串为abcdefgh

对于这道题我的思路是:利用两个库函数:sort()unique(),先排序,再去重,用unique()拿到排序后的去重后的第一个重复数据的下标,将前面的不重复数据输出即可

对于sort()unique() 不熟悉的,可以参考文章:
sort(): C++排序函数sort
unique(): 超简单C++去重排序

首先需要储备一些必要的知识:

我的代码实现如下:

#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;
}

以上 ?

未经允许不得转载:起风网 » C++题目–合并字符串
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录