マップの使い方、大文字と小文字の変換 (パット クラス B 1029 旧キーボード)

古いキーボードのいくつかのキーが壊れていたため、テキストを入力すると、対応する文字が表示されませんでした。入力する必要があるテキストと実際に入力するテキストが与えられた場合、壊れなければならないキーをリストしてください。

入力形式:

入力では、入力する文字と実際に入力する文字をそれぞれ 2 行で指定します。_各テキストは、A ~ Z (大文字と小文字を含む)、数字 0 ~ 9、およびアンダースコア(スペースを表す)で構成される 80 文字以下の文字列です 。タイトルは、両方の文字列が空でないことを保証します。

出力フォーマット:

壊れたキーを見つかった順に 1 行に出力します。このうち、英字は大文字のみ出力され、各バッドキーは 1 回だけ出力されます。タイトルには少なくとも 1 つの不良キーがあることが保証されています。

入力サンプル:

7_This_is_a_test
_hs_s_a_es

出力例:

7TI

この質問の2つのポイント:

1. 大文字を出力したい

2. 出力順序は欠落している順序に従う必要があり、各文字は一度しか出力できません

チェックアウト:

1.isalpha()、文字が文字かどうかを判断するために使用され、文字の場合はゼロ以外を返し、それ以外の場合はゼロを返します。

2. isalnum() は、文字が数字か文字か、つまり文字が a~z||A~Z||0~9 に属するかどうかを判断するために使用されます。0 を返すのではなく、0 以外を返すことです。

3.islower()、文字が小文字かどうか、つまり a~z に属するかどうかを判断するために使用されます。0 を返すのではなく、0 以外を返すことです。

4.isupper()、文字が大文字かどうかを判断するために使用されます。0 を返すのではなく、0 以外を返すことです。

5. char c = toupper(a)、a が文字の場合、a が小文字の場合は大文字に変換し、それ以外の場合は変更されません。a が数値の場合、ASCLL コードに従って対応する文字に変換します。(実際には a が文字であっても、入力後に int 型に変換されます)

6. char c=tolower(a)、a が文字の場合、a が大文字の場合は小文字に変換し、それ以外の場合は変更されません。a が数値の場合、ASCLL コードに従って対応する文字に変換します。

7.isdigit()、文字が数字かどうかを判断するために使用され、数字の場合はゼロ以外を返し、そうでない場合はゼロを返します。

8.to_string(), 数値を文字列に変換. ここで, 文字に変換された浮動小数点数の場合, 精度範囲内の小数点以下のすべての数値が表示されることに注意してください.

それらの実装の詳細は、次を参照できます。

C++ は文字の大文字と小文字を判断し、大文字と小文字を変換しますhttps://blog.csdn.net/WU9797/article/details/84853484

別: #include<ctype.h> は c に導入する必要がありますが、c++ には導入しないでください。

2点目、順番に出力することについては、もともと地図をたどろうと思っていたのですが、地図は作成時刻順ではなく、アルファベット順にソートされている可能性があるので、全体(完全な入力)をたどってから地図をクエリして置き換えることで同時に判断する価値

マップのトラバースには使用されませんが、関連するコードを貼り付けます。

c++map トラバーサルicon-default.png?t=M276https://blog.csdn.net/u010429424/article/details/75332700

#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
 
int main(){
    string fake,whole;
    map<char,int> kb;		//kb存放本应该输入的每一种字符,如果有对应的,那么int置为1 
    cin>>whole>>fake;
    int i = 0;
    for(i=0;i<whole.length();i++){
    	whole[i] = toupper(whole[i]);		//把真的每个字符改成大写 
    	kb[whole[i]] = 0;					//预先创建每个字符的map 
	}
 	for(i=0;i<fake.length();i++){
 		fake[i] = toupper(fake[i]);		//把假的每个字符改成大写 
    	kb[fake[i]] = 1;				//如果fake中有对应的,那么map值为1 
	}

    for(i = 0;i<whole.length();i++){
    	if(!kb[whole[i]]){
    		cout<<whole[i];
    		kb[whole[i]]=1;
		}
	}
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_45721305/article/details/123477751