1. 程式人生 > 其它 >c 題解 1029 舊鍵盤 (20 分)

c 題解 1029 舊鍵盤 (20 分)

原題

https://pintia.cn/problem-sets/994805260223102976/problems/994805292322111488

程式碼

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

char shouldget[81];
char trulyget[81];
int result[127] = {0};//對應的ASCII碼錶
int main()
{
    scanf("%s", shouldget);
    getchar();
    scanf("%s", trulyget);

    for (int i = 0; i < strlen(shouldget); i++)
    {
        result[(int)shouldget[i]] = 1;//把字元儲存為陣列索引並計數
    }
    for (int i = 0; i < strlen(trulyget); i++)
    {
        result[(int)trulyget[i]]++;
    }

    for (int i = 0; i < strlen(shouldget); i++)
    {
        int num = (int)shouldget[i];
        if (result[num] == 1)//把字元只出現一次的輸出
        {
            if (num >= 'A' && num <= 'Z')
            {
                cout << (char)num;
                result[num + 32] = 0;//把對應的小寫置為0
            }
            else if (num >= 'a')
            {
                cout << (char)(num - 32);
                result[num - 32] = 0;//把對應的大寫置為0
            }
            else
            {
                cout << (char)num;
            }
            result[num] = 0;//避免重複輸出
        }
    }
    return 0;
}

同樣的思路,別人的部落格https://blog.csdn.net/shiliang97/article/details/100085619

#include<iostream>
using namespace std;
int s3[256];
int main(){
	string s,s2;
	cin>>s>>s2;
	for(int i=0;i<s2.length();i++){
	if(s2[i]>='a'&&s2[i]<='z'){//轉換成大寫字母
		s2[i]+='A'-'a';
	}
	s3[s2[i]]=1;
	}
	for(int i=0;i<s.length();i++){
		if(s[i]>='a'&&s[i]<='z'){//轉換成大寫字母
		s[i]+='A'-'a';
		}
		if(s3[s[i]]!=1){//在真實輸出裡,找不到就輸出
			cout<<s[i];
			s3[s[i]]=1;
		}
	}
	return 0;
}