PTA:B1029 / B1033古いキーボードの問題。C ++

B1029古いキーボード

その対応する文字が表示されませんテキストをノックし、古いキーボードには、いくつかのキーを破壊しました。今、テキスト入力が与えられるべきであるだけでなく、実際のテキストが入力され、あなたは間違いなく壊れて、これらのキーを一覧表示します。

入力フォーマット:
テキスト入力が入力される行2に与えられており、実際のテキストを入力します。テキストの各部分は、文字(大文字と小文字を含む)AZからなるせいぜい80個の文字、数字0~9、および下線の組成_(スペースの代わりに)の文字列です。トピック保証2つの文字列が空ではありません。

出力フォーマット:
発見のため、破線で出力キーに応じました。唯一の悪い一回、各キーの中にのみ出力、出力大文字。トピックは、その少なくとも一つの悪いキーを確保します。

サンプル入力:
7_This_is_a_test
_hs_s_a_es

出力例:
7TI

アイデア:

  • 大文字と小文字を区別し、そして全ての出力が大文字であるので、文字が検出された場合にされていない文字を判断するプロセスは、スタイル小文字の文字が大文字に変換する統一することができるので
  • あなたが最後の文字の種類を決定するためにブール配列を設定することができるように文字は、一度だけ現れることがあるので限り、配列の長さは、z、AZ、0-9を含めることができるよう、_することができます、私は、コード番号のASCを使用し、前に出力はありませんオープン配列。

ちょうど読みます、一般的には、の使用はCで取得するコードを文字列で使用される開始++()関数のみ<cstdioを>ヘッダ・ファイルを呼び出す必要がありますが、テスト中に、PTAが得られますコンパイルエラー:エラー:で宣言されていなかった「ます」このスコープを取得(複数可)

お問い合わせは、PTAをサポートしていないサイトは()モードを取得することを学んだ後、あなたは、ヘッダーファイルを追加することができます<iostreamの>、使用cin.getline(S、100)、文字列の長いリストを入力する方法、あなたも(scanf関数を選択することができます」 %s「が)、それは注意すべきで、自動的に停止しますスペースを読み取るのscanf道、もはや読んでいません。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
 char str1[88],str2[88];
 bool visit[128]={false};
// gets(str1);
// gets(str2);
 cin.getline(str1,88);
 cin.getline(str2,88);
 int len1=strlen(str1);
 int len2=strlen(str2);
 for(int i=0;i<len1;i++)
 {
  int j;
  char c1,c2;
  for(j=0;j<len2;j++)
  {
   c1=str1[i];
   c2=str2[j];
   if(c1>='a'&&c1<='z')c1-=32;
   if(c2>='a'&&c2<='z')c2-=32;
   if(c1==c2)break;
  }
  if(j==len2&&visit[c1]==false)
  {
   printf("%c",c1);
   visit[c1]=true;
  }
 }
 return 0;
}

B 1033古いキーボードタイピング

その対応する文字が表示されませんテキストをノックし、古いキーボードには、いくつかのキーを破壊しました。送信テキストの結果は以下のようになり、テキスト入力は現在、与えられるべきで、それらの結合が壊れましたか?

入力フォーマット:
キー入力2を破線を付して、テキストを入力すること。大文字で対応する英語の文字キーは悪い与えるステップと、せいぜい105文字の文字列の各部分を。使用可能な文字は文字[AZ、AZ]、数字0-9、および_(スペースを表す)、アンダースコアが含ま,,, - 。、+(シフトキーを代表して)。タイトルは、第2の入力ラインに非空の文字列を確保します。
注:Shiftキーが壊れている場合は、大文字は再生できません。

出力フォーマット:
出力テキストは、行で再生することができます。文字は、その後、出力に空白行を再生できない場合。

サンプル入力:
7 + IE。
7_This_is_a_test。

出力例:
_hs_s_a_tst

アイデア:

  • 文字キーは、最初のケースでは、リードに敏感な出力への道バックが存在しないすべてのように手紙を破った後、比較されます
  • またはbool型アレイ裁判官、より大きなアレイへの注意を払うの使用は、すべての要素の統一使用することができmemsetの機能が欲しいです
  • 無傷である「+」を出力することができるアルファベットの大文字キーとギアポジションと仮定すると
  • この質問は、使用のscanf(「%s」が)こと、また取得することはできませんすることができます。後者の理由は、上記で言及されている、あなたは、データ点を通る道を見つけるません前者を使用している場合は、空の入力であってもよく、最初の行の場合を無視することができないので(すなわち、破壊キーなし)。使用scanf関数は、自動的にシステムが最初の行を読まないようにデフォルト設定されますので、こと、スペースをスキップします。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
 bool visit[300];
 memset(visit,true,sizeof(visit));
 char str[100011];
 cin.getline(str,100011);
 int len=strlen(str);
 for(int i=0;i<len;i++)
 {
  if(str[i]>='A'&&str[i]<='Z')
   str[i]=str[i]+32;
  visit[str[i]]=false;
 }
 cin.getline(str,100011);
 len=strlen(str);
 for(int i=0;i<len;i++)
 {
  if(str[i]>='A'&&str[i]<='Z')
  { 
   int tempstr=str[i]+32;
   if(visit[tempstr]==true&&visit['+']==true)
   {
    cout<<str[i];
   }
  }
  else if(visit[str[i]]==true)
  {
   printf("%c",str[i]);
  } 
 }
 cout<<endl;
 return 0;
}
公開された29元の記事 ウォンの賞賛1 ビュー942

おすすめ

転載: blog.csdn.net/qq_44654498/article/details/104941279