特定の文字を削除するためのアルゴリズム設計とCコードの実装

特定の文字を削除するためのアルゴリズム設計とCコードの実装

1. 要件の説明

長い文字列と短い文字列を入力し、短い文字列に現れる文字を長い文字列から削除するプログラムを作成します。

たとえば、長い文字列が「1234abcd」で短い文字列が「3a」の場合、プログラムによって処理された後の文字列は「124bcd」になります。また、別の例として、長い文字列が「good bye」で短い文字列が「obh」の場合、プログラムによって処理された後の文字列は「gd ye」になります。

2. アルゴリズム設計

長い文字列の文字と短い文字列の文字を 1 つずつ比較することで、長い文字列から文字を削除する必要があるかどうかを判断できます。

つまり、長い文字列が「1234abcd」で、短い文字列が「2a」の場合、最初に長い文字列の最初の文字「1」を短い文字列の「2」と「a」と比較し、それらが等しくないことがわかったら、文字「1」を新しい文字列に追加します。次に、長い文字列の 2 番目の文字「2」を短い文字列の「2」と「a」と比較し、それらが等しいことがわかったら、文字「2」を新しい文字列に追加しません。このサイクルを、長い文字列のすべての文字が比較されるまで繰り返します。

3. 特別なプロセスに関する考慮事項

プログラムを作成する過程では、次のような入力文字列の長さと形式を考慮する必要があります。

1. 2 つの入力文字列の 1 つに中国語の文字が含まれている場合、プログラムは後続の処理を実行せずに直接戻ります。

2. 短い文字列入力の長さが長い文字列の長さよりも大きい場合、プログラムは後続の処理を実行せずに直接戻ります。

4. プログラムコード

  1. /******************************************************************************************
  2. * 著作権 (C) 2016、Zhou Zhaoxiong。
  3. *
  4. * ファイル名: RemoveChars.c
  5. * ファイルID: なし
  6. * 内容の要約: 短い文字列に現れる長い文字列の文字を削除する
  7. * その他の指示: たとえば、長い文字列が「My name」で短い文字列が「na」の場合、結果は「My me」になります。
  8. * 現在のバージョン: V1.0
  9. * 著者: 周昭雄
  10. * 完成日: 20160318
  11. *
  12. ******************************************************************************/
  13. #include < stdio.h >  
  14.  
  15. // データ型を再定義する
  16. typedef signed char INT8;
  17. 型定義 int INT32;
  18. typedef 符号なし int UINT32;
  19.  
  20. // 関数宣言
  21. void RemoveCharsFromStr(INT8 *pszInputLongStr, INT8 *pszInputShortStr);
  22.  
  23.  
  24. /******************************************************************************************
  25. * 機能説明: 主な機能
  26. * 入力パラメータ: なし
  27. * 出力パラメータ: なし
  28. * 戻り値: 0 - 実行成功 その他 - 実行失敗
  29. * その他の指示: なし
  30. * 変更日 バージョン番号 修正者 変更内容
  31. * ---------------------------------------------------------------------
  32. * 20160318 V1.0 作成者: Zhou Zhaoxiong
  33. ******************************************************************************/
  34. INT32 メイン()
  35. {
  36. INT8 szInputLongStr[100] = {0};
  37. INT8 szInputShortStr[50] = {0};
  38. UINT32 iPosFlag = 0 ;
  39.      
  40. printf("長い文字列を入力してください: \n");
  41. szInputLongStr を取得します。
  42. printf(" InputLongStr =%s\n", szInputLongStr);
  43.  
  44. printf("短い文字列を入力してください: \n");
  45. szInputShortStr を取得します。
  46. printf(" InputShortStr =%s\n", szInputShortStr);
  47.  
  48. // 2つの文字列に中国語の文字が含まれているかどうかを判定します
  49. ( iPosFlag = 0 ; iPosFlag <   strlen (szInputLongStr); iPosFlag++)
  50. {
  51. if (szInputLongStr[iPosFlag] <   0 ) // 0未満は中国語の文字が含まれていることを意味します
  52. {
  53. printf("%s には中国語の文字が含まれています。確認してください!\n", szInputLongStr);
  54. -1 を返します。
  55. }
  56. }
  57.  
  58. ( iPosFlag = 0 ; iPosFlag <   strlen (szInputShortStr); iPosFlag++)
  59. {
  60. if (szInputShortStr[iPosFlag] <   0 ) // 0未満は中国語の文字が含まれていることを意味します
  61. {
  62. printf("%s には中国語の文字が含まれています。確認してください!\n", szInputShortStr);
  63. -1 を返します。
  64. }
  65. }
  66.  
  67. // 短い文字列の長さが長い文字列の長さを超えているかどうかを判定します
  68. (strlen(szInputShortStr) > strlen(szInputLongStr)の場合)
  69. {
  70. printf("%s は %s より長いです。確認してください!\n", szInputShortStr, szInputLongStr);
  71. -2 を返します。
  72. }
  73.  
  74. // 長い文字列から短い文字列の文字を削除する関数を呼び出す
  75. 文字列から文字を削除します。
  76.      
  77. 0を返します。
  78. }
  79.  
  80.  
  81. /******************************************************************************************
  82. * 関数の説明: 長い文字列から短い文字列の文字を削除します
  83. * 入力パラメータ: pszInputLongStr - 入力する長い文字列
  84. pszInputShortStr - 入力の短い文字列
  85. * 出力パラメータ: なし
  86. * 戻り値: なし
  87. * その他の指示: なし
  88. * 変更日 バージョン番号 修正者 変更内容
  89. * ---------------------------------------------------------------------
  90. * 20160318 V1.0 作成者: Zhou Zhaoxiong
  91. ******************************************************************************/
  92. void RemoveCharsFromStr(INT8 *pszInputLongStr, INT8 *pszInputShortStr)
  93. {
  94. INT8 szNewtStr[100] = {0};
  95. UINT32 iOuterLoopF​​lag = 0 ;
  96. UINT32 iInnerLoopF​​lag = 0 ;
  97. UINT32 iCharUseFlag = 0 ;
  98.  
  99. if ( pszInputLongStr == NULL || pszInputShortStr == NULL)
  100. {
  101. 戻る;
  102. }
  103.  
  104. memset(szNewtStr, 0x00, sizeof(szNewtStr));
  105.      
  106. ( iOuterLoopF​​lag = 0 ; iOuterLoopF​​lag <   strlen (pszInputLongStr); iOuterLoopF​​lag++)
  107. {
  108. iChar使用フラグ= 1 ;
  109. ( iInnerLoopF​​lag = 0 ; iInnerLoopF​​lag <   strlen (pszInputShortStr); iInnerLoopF​​lag++)
  110. {
  111. pszInputLongStr[iOuterLoopF​​lag] == pszInputShortStr[iInnerLoopF​​lag]の場合
  112. {
  113. iCharUseFlag = 0 ; // この文字を新しい文字列に追加しない
  114. 壊す;
  115. }
  116. }
  117.      
  118. ( iCharUseFlag == 1)の場合
  119. {
  120. strncat(szNewtStr、pszInputLongStr+iOuterLoopF​​lag、1);
  121. }
  122. }
  123.      
  124. printf("%s から %s の文字を削除します。新しい文字列は %s\n です", pszInputShortStr, pszInputLongStr, szNewtStr);
  125. }

5. プログラムのテスト

記述したプログラム「RemoveChars.c」を Linux マシンにアップロードし、「gcc -g -o RemoveCharsRemoveChars.c」コマンドを使用してプログラムをコンパイルし、「RemoveChars」ファイルを生成します。以下はプログラムの詳細なテストです。

1. 長い文字列が「1234abcd」で、短い文字列が「2a」の場合、プログラムは次のように実行されます。

  1. 長い文字列を入力してください:
  2. 1234abcd
  3. 入力長文字列= 1234abcd  
  4. 短い文字列を入力してください:
  5. 2a
  6. 入力ショートストリング= 2a  
  7. 1234abcd から 2a の文字を削除すると、新しい文字列は 134bcd になります。

2. 長い文字列が「Happy dog!」で、短い文字列が「ao」の場合、プログラムは次のように実行されます。

  1. 長い文字列を入力してください:
  2. 幸せな犬!
  3. InputLongStr =幸せな犬!
  4. 短い文字列を入力してください:
  5. あお
  6. 入力ショート文字列= ao  
  7. Happy dog! から ao の文字を削除します。新しい文字列は Hppy dg! です。

3. 長い文字列が「我们123」で短い文字列が「345」の場合、プログラムは次のように実行されます。

  1. 長い文字列を入力してください:
  2. 私たち123
  3. 入力長文字列= us 123
  4. 短い文字列を入力してください:
  5. 345
  6. 入力ショートストリング= 345  
  7. 123には中国語の文字がありますので、ご確認ください。

4. 長い文字列が「12345」で短い文字列が「234567」の場合、プログラムは次のように実行されます。

  1. 長い文字列を入力してください:
  2. 12345
  3. 入力長文字列= 12345  
  4. 短い文字列を入力してください:
  5. 234567
  6. 入力ショート文字列= 234567  
  7. 234567 は 12345 より長いです。確認してください。

5. 長い文字列が「abcdsf」で短い文字列が「af2」の場合、プログラムは次のように実行されます。

  1. 長い文字列を入力してください:
  2. アブダビ
  3. 入力長文字列= abcdsf  
  4. 短い文字列を入力してください:
  5. AF2 2015/03/13
  6. 入力ショート文字列= af2  
  7. abcdsf から af2 の文字を削除します。新しい文字列は bcds です。

6. 需要拡大

この記事の要件と手順に基づいて、要件の次の拡張を検討できます。

1. 短い文字列の文字が長い文字列内に存在する場合、長い文字列からその文字を直接削除するのではなく、長い文字列内の対応する位置をスペースで埋めます。

2. 入力文字列に漢字が出現してはならないという制限はありません。つまり、長い文字列が「我们123」で、短い文字列が「我1」の場合、プログラム処理後の文字列は「们23」になります。

[この記事は51CTOコラムニストの周兆雄氏によるオリジナル記事です。著者のWeChat公開アカウント:周の論理(logiczhou)]

この著者の他の記事を読むにはここをクリックしてください

<<:  [文字列処理アルゴリズム] 最長連続文字とその出現回数のアルゴリズム設計とCコード実装

>>:  [文字列処理アルゴリズム] 最長共通部分文字列を取得するためのアルゴリズム設計とCコード実装

ブログ    
ブログ    

推薦する

人工知能はビジネスに大きな影響を与えます。AIは中小企業に5つの大きなメリットをもたらします。

市場のトレンドはどのくらいの速さで発展していますか? 特に人工知能に関しては。企業は驚くべき速度で ...

人工知能システム:無制限の核融合反応を現実のものに

近年、研究者らはトカマクの停止や損傷の原因となる核分裂反応を研究している。核分裂反応を予測・制御でき...

...

たった一枚の写真でTikTokガール全員が踊れる

数日前、アリババの研究チームは「Animate Anyone」と呼ばれる手法を構築しました。この手法...

...

自動運転:距離推定にステレオビジョンをどのように活用するのか?

自動化システムでは、ディープラーニングとコンピュータービジョンが広く普及し、あらゆる場所で利用されて...

物を掴んで楽々と移動できる柔らかいロボットを見たことがありますか?

ソフトロボット分野の研究者は、人間にとってより安全に操作できる新世代の機械を生み出すことを望んでおり...

AIは学習しません!ネイチャー誌の最新研究が人工知能のブラックボックスを解読

人工知能(AI)は急速に進歩していますが、人間にとってその強力なモデルは「ブラックボックス」です。モ...

UNITは企業向けインテリジェント対話システムアプリケーションの構築を開始

近年の科学技術の発展に伴い、企業サービスと企業は多くの反復的な労働と投資に直面していると思います。現...

ガートナー:2021年までに70%の組織が従業員の生産性向上にAIを活用する

人工知能は職場にますます浸透しつつあり、現在では仮想パーソナルアシスタント (VPA) やその他の形...

ハーバード大学とMITがあるボストンは、政府が顔認識を禁止したと公式に発表した。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

LLM収益化プラットフォームが登場! LangChain+DemoGPT 協力: アイデアがあればお金が稼げる、「プログラマーが足りない」時代は終わった

大規模な言語モデルのサポートにより、開発者は多くの新しい機能を実装し、より幅広いアプリケーション シ...

フィードフォワードネットワーク + 線形相互作用層 = 残差 MLP、Facebook の純粋な MLP 画像分類アーキテクチャが市場に参入

[[398872]]最近では、多層パーセプトロン (MLP) が CV 分野の重要な研究テーマとなっ...