1. 要件の説明 文字列を入力し、文字列内で連続する最長の文字と、その文字が連続して出現する回数を検索するプログラムを作成します。 たとえば、「123444445」では、連続する最長の文字は 4 で、連続出現回数は 5 です。「abcddef」では、連続する最長の文字は d で、連続出現回数は 2 です。「ab」では、連続する最長の文字は a で、連続出現回数は 1 です。 2. アルゴリズム設計 文字列内の各文字を 1 つずつ比較して、最も長く連続する文字と、その文字が連続して出現する回数を取得できます。プログラムの全体的な流れを図 1 に示します。 図1 プログラムの全体的なプロセス 3. 特別なプロセスに関する考慮事項 プログラムを作成する過程では、次のような入力文字列の長さと形式を考慮する必要があります。 1. 入力文字列にスペースが含まれている場合、スペースの前の文字列のみを処理します。 2. 入力文字列には数字、文字、一部の特殊文字を含めることができますが、中国語の文字を含めることはできません。 4. プログラムコード - /******************************************************************************************
- * 著作権 (C) 2016、Zhou Zhaoxiong。
- *
- * ファイル名: LongestContinChars.c
- * ファイルID: なし
- * 概要: 文字列内の最長連続文字とその数を見つける
- * その他の指示: たとえば、「aabbbc」で最も長く続く文字は b で、その数字は 3 です。
- * 現在のバージョン: V1.0
- * 著者: 周昭雄
- * 完成日: 20160316
- *
- ******************************************************************************/
- #include < stdio.h >
-
- // データ型を再定義する
- typedef signed char INT8;
- 型定義 int INT32;
- typedef 符号なし int UINT32;
-
- // 関数宣言
- void GetLongestContinChars(INT8 *pszInputStr);
-
-
- /******************************************************************************************
- * 機能説明: 主な機能
- * 入力パラメータ: なし
- * 出力パラメータ: なし
- * 戻り値: 0 - 実行成功 その他 - 実行失敗
- * その他の指示: なし
- * 変更日 バージョン番号 修正者 変更内容
- * ---------------------------------------------------------------------
- * 20160316 V1.0 作成者: Zhou Zhaoxiong
- ******************************************************************************/
- INT32 メイン()
- {
- INT8 szInputStr[100] = {0};
- UINT32 iPosFlag = 0 ;
-
- printf("文字列を入力してください: \n");
- scanf("%s", szInputStr);
- printf(" InputStr =%s\n", szInputStr);
-
- // まず中国語の文字があるかどうかを確認します
- ( iPosFlag = 0 ; iPosFlag < strlen (szInputStr); iPosFlag++)
- {
- if (szInputStr[iPosFlag] < 0 ) // 0未満は中国語の文字が含まれていることを意味します
- {
- printf("%s には中国語の文字が含まれています。確認してください!\n", szInputStr);
- -1 を返します。
- }
- }
-
- // 関数を再度呼び出して、最長連続文字とその番号を取得します
- GetLongestContinChars(szInputStr);
-
- 0を返します。
- }
-
-
- /******************************************************************************************
- * 関数の説明: 最も連続して出現する文字とその連続出現回数を取得します
- * 入力パラメータ: pszInputStr-入力文字列
- * 出力パラメータ: なし
- * 戻り値: なし
- * その他の指示: なし
- * 変更日 バージョン番号 修正者 変更内容
- * ---------------------------------------------------------------------
- * 20160316 V1.0 作成者: Zhou Zhaoxiong
- ******************************************************************************/
- void GetLongestContinChars(INT8 *pszInputStr)
- {
- INT8 cCompareChar = '\0' ;
- INT8 cLongestContinChar = '\0' ;
- UINT32 iMaxLen = 1 ;
- UINT32 iCharCount = 1 ;
- UINT32 iPosFlag = 0 ;
-
- pszInputStr == NULL の場合
- {
- 戻る;
- }
-
- cCompareChar = pszInputStr [0]; // 最初の文字から比較を開始する
- cLongestContinChar = pszInputStr [0];
-
- ( iPosFlag = 1 ; iPosFlag < strlen (pszInputStr); iPosFlag++)
- {
- if (pszInputStr[iPosFlag] == cCompareChar)
- {
- iCharCount++; // 同じ文字数に1を加算する
- }
- それ以外
- {
- iCharCount = 1 ; // 文字が異なる場合はカウントは1になります
- cCompareChar = pszInputStr [iPosFlag]; // 新しい文字を再比較する
- }
-
- if (iCharCount > iMaxLen) // 最も連続して出現する文字とその出現回数を取得します
- {
- iMaxLen = iCharCount ;
- cLongestContinChar = pszInputStr [iPosFlag];
- }
- }
-
- printf("最も連続して出現する文字は: %c\n連続出現回数は: %d\n", cLongestContinChar, iMaxLen);
- }
5. プログラムのテスト 作成したプログラム「LongestContinChars.c」を Linux マシンにアップロードし、「gcc -g -oLongestContinChars LongestContinChars.c」コマンドを使用してプログラムをコンパイルし、「LongestContinChars」ファイルを生成します。以下はプログラムの詳細なテストです。 1. 入力文字列が「ababbba」の場合、プログラムは次のように実行されます。 - 文字列を入力してください:
- アババ
- 入力文字列= ababbba
- 連続して最も多く出現する文字は、bです。
- 連続出現回数は3です
2. 入力文字列が「123321」の場合、プログラムは次のように実行されます。 - 文字列を入力してください:
- 123321
- 入力文字列= 123321
- 最も連続して出現する文字は3です。
- 連続出現回数は2です
3. 入力文字列が「!@##$%」の場合、プログラムは次のように実行されます。 - 文字列を入力してください:
- !@##$%
- 入力文字列=!@##$%
- 連続して最も多く出現する文字は # です。
- 連続出現回数は2です
4. 入力文字列が「abcdef」の場合、プログラムは次のように実行されます。 - 文字列を入力してください:
- ABCデフ
- 入力文字列= abcdef
- 連続して最も多く出現する文字は次の通りです。
- 連続出現回数は1です
5. 入力文字列が「we123」の場合、プログラムは次のように実行されます。 - 文字列を入力してください:
- 私たち123
- 入力文字列= us 123
- 123には中国語の文字がありますので、ご確認ください。
6. 需要拡大 この記事の要件と手順に基づいて、要件の次の拡張を検討できます。 1. 大文字と小文字は区別されません。つまり、入力文字列が「AAAaaa」の場合、プログラムは 6 回出現する最長の連続文字 A または a を出力します。 2. 文字列に漢字が出現してはならないという制限はありません。つまり、入力文字列が「窝窝头123」の場合、プログラムは最長の連続文字「窝」を出力し、出現回数は 2 です。 [この記事は51CTOコラムニストの周兆雄氏によるオリジナル記事です。著者のWeChat公開アカウント:周の論理(logiczhou)] この著者の他の記事を読むにはここをクリックしてください |