PTA---團體程序設計天梯賽——L1-011 A-B

本題要求你計算A-B。不過麻煩的是,A和B都是字符串 —— 即從字符串A中把字符串B所包含的字符全刪掉,剩下的字符組成的就是字符串A-B。

輸入格式:

輸入在2行中先後給出字符串A和B。兩字符串的長度都不超過10^4^,並且保證每個字符串都是由可見的ASCII碼和空白字符組成,最後以換行符結束。

輸出格式:

在一行中打印出A-B的結果字符串。

輸入樣例:

I love GPLT!  It's a fun game!
aeiou

輸出樣例:

I lv GPLT!  It's  fn gm!

解題思路一:創建一個新的整形數組C,用B字符串中的字符轉換成ASCII碼值來標記數組C,接着把A字符串中的對應到C,如果沒有被標記,則輸出,反之不輸出。

#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

int main() {
	string a,b;
	int c[128];
	memset(c,0,sizeof(c));//memset函數初始化c字符串 
	getline(cin,a);//按行讀取字符串a,遇到回車轉到輸入b 
	getline(cin,b);
	int m,n;
	m=a.length();
	n=b.length();
	for(int i=0;i<n;i++)
	{
		c[(int)b[i]]=1;//把b中的字符轉換成ASCII碼,在c字符串中標記 
	}
	for(int k=0;k<m;k++)
	{
		if(c[(int)a[k]]==0)//把a中的字符轉換成ASCII,如果字符已經被標記,不輸出,反之輸出 
		cout<<a[k];
	}
	return 0;
}

解題思路二:用getline()輸入字符串之後,使用兩層for循環來比較,定義一個標記變量,代碼如下:

#include<iostream>
using namespace std;
int flag[10001];
int main()
{
	string a,b;
	char c,d='#';
	getline(cin,a);
	getline(cin,b);
	for(int i=0;i<a.length();i++)
	{
		c=a[i];
		for(int j=0;j<b.length();j++)
		{
			if(c==b[j])
			{
				flag[i]=1;
			}	
		}
		if(flag[i]==0)
		cout<<a[i];
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章