【PAT乙級】字元串A+B

  • 2019 年 11 月 8 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/weixin_42449444/article/details/85016265

題目描述:

給定兩個字元串 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

解題思路:

這個題真的不難,可是這一次PAT乙級考試,我的的確確就輸在了這題上面,在考試的時候由於我時間分配的不合理,我這題沒提交過一次程式碼,20分直接沒了。5道題里我就空了這一道水題沒提交過、沒有得分。停止提交之後的5分鐘,我寫出了程式碼。這題不就是用map來記錄輸出過的字元,不重複地輸出字元就AC了嗎?可以說是非常遺憾了。

AC程式碼:

#include <bits/stdc++.h>  using namespace std;    int main()  {      string a,b;      getline(cin,a);      getline(cin,b);      string result = a+b;      map<char,int> m;    //map的key值是字元,value值用0和1來記錄是否輸出過      for(auto it: result)  //for-each循環遍歷字元串A+B      {          if(m[it]==0)    //若該字元沒有出現過          {              cout << it;  //輸出該字元              m[it] = 1;   //並在map中記錄它輸出過了          }      }      return 0;  }