当前位置: 代码迷 >> 综合 >> c++笔记---数组的特殊用法 1093 字符串A+B (20 分)
  详细解决方案

c++笔记---数组的特殊用法 1093 字符串A+B (20 分)

热度:85   发布时间:2023-11-27 05:04:18.0

数组新用法
PAT题目 1093 字符串A+B (20 分)
c++中数组 简单定义int arr[100]={1,2,3,4,5,6,0};

本以为数组arr[100]中的中括号里只能用int类型的数字,没想到还可以用字母;
在做PAT 乙级题目 1093 字符串A+B中发现

题目1093 字符串A+B (20 分)

给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。

输入格式:
输入在两行中分别给出 A 和 B,均为长度不超过 10 的6次方的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。

输出格式:
在一行中输出题面要求的 A 和 B 的和。

输入样例:
This is a sample test
to show you_How it works
结尾无空行

输出样例:
This ampletowyu_Hrk
结尾无空行
我用自己的写法 运行时间长 内存大 行数多
但写出来还是快乐的
请添加图片描述

其中有些头文件不必要 在做题过程中想到一些方法就加上了头文件

#include<iostream>
#include<set>
#include<string>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    set<char>Set1;string str1;string str2;getline(cin, str1);getline(cin, str2);string str = str1 + str2;for (int i = 0; i < str.size(); i++){
    Set1.insert(str[i]);}vector<char>v1;for (auto i : Set1){
    v1.push_back(i);}for (int i = 0; i < str.size(); i++){
    for (auto j : v1){
    if (str[i] == j){
    cout << str[i];vector<char>::iterator pos = find(v1.begin(), v1.end(), j);v1.erase(pos);}}}return 0;
}

测试结果为
在这里插入图片描述
又慢又大 行数也多
在这里插入图片描述

在网上看到别人的写法
真是感觉差距太大了
别人的代码
就这么一点点,刚看的时候我都惊呆了,怎么可以那么少!
在这里插入图片描述
但也看到了差距
在这里插入图片描述
别人咋那么那么强
在这里插入图片描述
只能膜拜大佬
在这里插入图片描述
下面上代码

#include <iostream>
using namespace std;
int main(){
    int a[128]={
    0};string s1,s2,s3;getline(cin,s1);getline(cin,s2);s3=s1+s2;for(int i=0;i<s3.length()  ;i++){
    if(a[s3[i]]==0){
    cout<<s3[i];a[s3[i]]++;}}return 0;
}

测试结果为
在这里插入图片描述

第一次遇到这种用法,真的好简洁。

以前自己写出来了题目, 就没怎么搜别人的写法了。
这次真的发现了,和别人的差距真的太大了。
内心先佩服了。
然后归于平淡!
请添加图片描述
加油吧,奥里给!