1. 程式人生 > >PAT_B_1033 舊鍵盤打字 (20 分)【測試點2】

PAT_B_1033 舊鍵盤打字 (20 分)【測試點2】

舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及壞掉的那些鍵,打出的結果文字會是怎樣?

輸入格式:

輸入在 2 行中分別給出壞掉的那些鍵、以及應該輸入的文字。其中對應英文字母的壞鍵以大寫給出;每段文字是不超過 10​5​​ 個字元的串。可用的字元包括字母 [a-z, A-Z]、數字 0-9、以及下劃線 _(代表空格)、,.-+(代表上檔鍵)。題目保證第 2 行輸入的文字串非空。

注意:如果上檔鍵壞掉了,那麼大寫的英文字母無法被打出。

輸出格式:

在一行中輸出能夠被打出的結果文字。如果沒有一個字元能被打出,則輸出空行。

輸入樣例:

7+IE.
7_This_is_a_test.

輸出樣例:

_hs_s_a_tst

本題易出問題點:

1.如果上檔鍵‘+’壞了  那麼大寫字母將無法輸出

2.壞掉的字母鍵 全部以大寫字母輸出

3.【測試點2出錯處】壞掉的字母鍵不一定有內容! 

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
	int letter[26] = { 0 };
	int number[10] = { 0 };
	int douhao = 1, juhao = 1, kongge = 1, sub = 1, sum = 1;
	char bad[41];
	cin.getline(bad,41);//測試點2出錯處,可以輸入空
	//cin >> bad;        //這樣無法輸入空字串,所以出錯
	int index;
	int len = strlen(bad);
	for (int i = 0; i<len; i++)
	{
		if (bad[i] <= 'Z'&&bad[i] >= 'A')
		{
			index = bad[i] - 'A';
			letter[index] = 1;
			continue;
		}
		if (bad[i] <= '9'&&bad[i] >= '0')
		{
			index = bad[i] - '0';
			number[index] = 1;
			continue;
		}
		if (bad[i] == ',')
		{
			douhao = 0; continue;
		}
		if (bad[i] == '.')
		{
			juhao = 0; continue;
		}
		if (bad[i] == '-')
		{
			sub = 0; continue;
		}
		if (bad[i] == '+')
		{
			sum = 0; continue;
		}
		if (bad[i] == '_')
		{
			kongge = 0; continue;
		}
	}
	char original[110000];
	cin >> original;
	int length = strlen(original);
	for (int i = 0; i<length; i++)
	{
		if (original[i] <= 'z'&&original[i] >= 'a')
		{
			index = original[i] - 'a';
			if (!letter[index])cout << original[i];
			continue;
		}
		if (original[i] <= 'Z'&&original[i] >= 'A')
		{
			index = original[i] - 'A';
			if (!letter[index]&&sum)cout << original[i];
			continue;
		}
		if (original[i] <= '9'&&original[i] >= '0')
		{
			index = original[i] - '0';
			if (!number[index])cout << original[i];
			continue;
		}
		if (original[i] == ',')
		{
			if (douhao)cout << ",";
            continue;
		}
		if (original[i] == '.')
		{
			if (juhao)cout << ".";
            continue;
		}
		if (original[i] == '-')
		{
			if (sub)cout << "-";
            continue;
		}
		if (original[i] == '+')
		{
			if (sum)cout << "+";
            continue;
		}
		if (original[i] == '_')
		{
			if (kongge)cout << "_";
			continue;
		}
	}
	return 0;
}