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

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

1. 要件の説明

文字列を入力し、文字列内で連続する最長の文字と、その文字が連続して出現する回数を検索するプログラムを作成します。

たとえば、「123444445」では、連続する最長の文字は 4 で、連続出現回数は 5 です。「abcddef」では、連続する最長の文字は d で、連続出現回数は 2 です。「ab」では、連続する最長の文字は a で、連続出現回数は 1 です。

2. アルゴリズム設計

文字列内の各文字を 1 つずつ比較して、最も長く連続する文字と、その文字が連続して出現する回数を取得できます。プログラムの全体的な流れを図 1 に示します。

図1 プログラムの全体的なプロセス

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

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

1. 入力文字列にスペースが含まれている場合、スペースの前の文字列のみを処理します。

2. 入力文字列には数字、文字、一部の特殊文字を含めることができますが、中国語の文字を含めることはできません。

4. プログラムコード

  1. /******************************************************************************************
  2. * 著作権 (C) 2016、Zhou Zhaoxiong。
  3. *
  4. * ファイル名: LongestContinChars.c
  5. * ファイルID: なし
  6. * 概要: 文字列内の最長連続文字とその数を見つける
  7. * その他の指示: たとえば、「aabbbc」で最も長く続く文字は b で、その数字は 3 です。
  8. * 現在のバージョン: V1.0
  9. * 著者: 周昭雄
  10. * 完成日: 20160316
  11. *
  12. ******************************************************************************/
  13. #include < stdio.h >  
  14.  
  15. // データ型を再定義する
  16. typedef signed char INT8;
  17. 型定義 int INT32;
  18. typedef 符号なし int UINT32;
  19.  
  20. // 関数宣言
  21. void GetLongestContinChars(INT8 *pszInputStr);
  22.  
  23.  
  24. /******************************************************************************************
  25. * 機能説明: 主な機能
  26. * 入力パラメータ: なし
  27. * 出力パラメータ: なし
  28. * 戻り値: 0 - 実行成功 その他 - 実行失敗
  29. * その他の指示: なし
  30. * 変更日 バージョン番号 修正者 変更内容
  31. * ---------------------------------------------------------------------
  32. * 20160316 V1.0 作成者: Zhou Zhaoxiong
  33. ******************************************************************************/
  34. INT32 メイン()
  35. {
  36. INT8 szInputStr[100] = {0};
  37. UINT32 iPosFlag = 0 ;
  38.      
  39. printf("文字列を入力してください: \n");
  40. scanf("%s", szInputStr);
  41. printf(" InputStr =%s\n", szInputStr);
  42.  
  43. // まず中国語の文字があるかどうかを確認します
  44. ( iPosFlag = 0 ; iPosFlag <   strlen (szInputStr); iPosFlag++)
  45. {
  46. if (szInputStr[iPosFlag] <   0 ) // 0未満は中国語の文字が含まれていることを意味します
  47. {
  48. printf("%s には中国語の文字が含まれています。確認してください!\n", szInputStr);
  49. -1 を返します。
  50. }
  51. }
  52.  
  53. // 関数を再度呼び出して、最長連続文字とその番号を取得します
  54. GetLongestContinChars(szInputStr);
  55.  
  56. 0を返します。
  57. }
  58.  
  59.  
  60. /******************************************************************************************
  61. * 関数の説明: 最も連続して出現する文字とその連続出現回数を取得します
  62. * 入力パラメータ: pszInputStr-入力文字列
  63. * 出力パラメータ: なし
  64. * 戻り値: なし
  65. * その他の指示: なし
  66. * 変更日 バージョン番号 修正者 変更内容
  67. * ---------------------------------------------------------------------
  68. * 20160316 V1.0 作成者: Zhou Zhaoxiong
  69. ******************************************************************************/
  70. void GetLongestContinChars(INT8 *pszInputStr)
  71. {
  72. INT8 cCompareChar = '\0' ;
  73. INT8 cLongestContinChar = '\0' ;
  74. UINT32 iMaxLen = 1 ;
  75. UINT32 iCharCount = 1 ;
  76. UINT32 iPosFlag = 0 ;
  77.      
  78. pszInputStr == NULL の場合
  79. {
  80. 戻る;
  81. }
  82.  
  83. cCompareChar = pszInputStr [0]; // 最初の文字から比較を開始する
  84. cLongestContinChar = pszInputStr [0];
  85.  
  86. ( iPosFlag = 1 ; iPosFlag <   strlen (pszInputStr); iPosFlag++)
  87. {
  88. if (pszInputStr[iPosFlag] == cCompareChar)
  89. {
  90. iCharCount++; // 同じ文字数に1を加算する
  91. }
  92. それ以外
  93. {
  94. iCharCount = 1 ; // 文字が異なる場合はカウントは1になります
  95. cCompareChar = pszInputStr [iPosFlag]; // 新しい文字を再比較する
  96. }
  97.          
  98. if (iCharCount > iMaxLen) // 最も連続して出現する文字とその出現回数を取得します
  99. {
  100. iMaxLen = iCharCount ;
  101. cLongestContinChar = pszInputStr [iPosFlag];
  102. }
  103. }
  104.   
  105. printf("最も連続して出現する文字は: %c\n連続出現回数は: %d\n", cLongestContinChar, iMaxLen);
  106. }

5. プログラムのテスト

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

1. 入力文字列が「ababbba」の場合、プログラムは次のように実行されます。

  1. 文字列を入力してください:
  2. アババ
  3. 入力文字列= ababbba  
  4. 連続して最も多く出現する文字は、bです。
  5. 連続出現回数は3です

2. 入力文字列が「123321」の場合、プログラムは次のように実行されます。

  1. 文字列を入力してください:
  2. 123321
  3. 入力文字列= 123321  
  4. 最も連続して出現する文字は3です。
  5. 連続出現回数は2です

3. 入力文字列が「!@##$%」の場合、プログラムは次のように実行されます。

  1. 文字列を入力してください:
  2. !@##$%
  3. 入力文字列=!@##$%
  4. 連続して最も多く出現する文字は # です。
  5. 連続出現回数は2です

4. 入力文字列が「abcdef」の場合、プログラムは次のように実行されます。

  1. 文字列を入力してください:
  2. ABCデフ
  3. 入力文字列= abcdef  
  4. 連続して最も多く出現する文字は次の通りです。
  5. 連続出現回数は1です

5. 入力文字列が「we123」の場合、プログラムは次のように実行されます。

  1. 文字列を入力してください:
  2. 私たち123
  3. 入力文字列= us 123
  4. 123には中国語の文字がありますので、ご確認ください。

6. 需要拡大

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

1. 大文字と小文字は区別されません。つまり、入力文字列が「AAAaaa」の場合、プログラムは 6 回出現する最長の連続文字 A または a を出力します。

2. 文字列に漢字が出現してはならないという制限はありません。つまり、入力文字列が「窝窝头123」の場合、プログラムは最長の連続文字「窝」を出力し、出現回数は 2 です。

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

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

<<:  【文字列処理アルゴリズム】回文判定のアルゴリズム設計とCコード実装

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

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

5G+AI: 未来に影響を与える新たなトレンド

7月9日、2020年世界人工知能会議クラウドサミットが正式に開幕しました。 AI という SF 用語...

2020 年のグラフ機械学習の新しいトレンド

導入2020 年はまだ始まったばかりですが、最新の研究論文ではグラフ機械学習 (GML) へのトレン...

「アルゴリズム経済」はどのような新しいモデルやトレンドを生み出すのでしょうか?

2000年から10年間の発展を経て、中国のPC時代のインターネットは「交通経済」を生み出しました。...

人工知能はセキュリティの優れた防御線である

2021年を迎え、私たちは新しい働き方や新しい労働環境に慣れてきました。多くの人は、デジタル通信手段...

大規模モデル: 大規模モデルの難しさは何ですか?

みなさんこんにちは。私の名前はティムです。 GPT モデルの誕生以来、そのパラメータスケールは継続的...

RELX: 回答者の95%がAI人材の採用は課題であると考えている

海外メディアは、情報分析プロバイダーRELXの新しいレポートによると、回答者の95%が人工知能の人材...

あるいは人間の目よりも鮮明です!世界初の3D人工眼球が発売され、何百万人もの人々が視力を取り戻す

[[327384]] 5月24日、メディアの報道によると、香港科技大学の研究者らがネイチャー誌に発表...

2021 年に注目すべき 4 つの自動化問題

[[377158]]研究によれば、コロナウイルスのパンデミック中に組織が確立したビジネス規範は、パン...

収集する価値のあるAIツールメモ8つ

緊急時のメモとしても使える、コレクションする価値のあるAI写真を8枚シェアします。最初の RTF フ...

Microsoft と Meta が提携し、Bing 検索を Meta AI チャットボットに統合

9月28日早朝、Meta Connect 2023において、MetaはMeta AIという新しいチャ...

人工知能は転移学習を使用して、自然画像から抽出した特徴を使用してイラスト分類の精度を向上させます

人工知能は転移学習を利用して、自然画像から抽出した特徴を利用してイラスト分類の精度を向上させます (...

デジタル時代において、クラウドインテリジェンスはクラウドの未来を再定義します

[51CTO.comからのオリジナル記事] デジタル時代において、人工知能の普及はクラウドコンピュー...

AIの「不確実な時代」にどう向き合うか

AIの拡大する影響私たちの日常生活における AI の影響はますます明らかになってきています。 AI ...

人工知能の力: ウェブ開発者がいまだに雇用されている理由

記事ソース| https://dzone.com/articles/the-power-of-ai-...