1989年開業 情報工学部門 文部科学省登録番号 第22082号 公益社団法人日本技術士会会員 東大阪商工会議所会員

≫サンプルプログラム一覧 

オープンソース/C言語サンプルプログラム 文字列を置き換える(文字列操作)

●入力した元の文字列中の部分文字列を検索し、別の文字列に置き換える
 プログラムです。
●置換え処理は、strREPall()関数として実装します。
●gets関数を使って、str1(元の文字列),str2(検索文字列),
 str3(置換え文字列)を入力します
 ※コマンドプロンプト画面で、Alt+漢字キーを押すと日本語入力にな
  ります。もう一度漢字キーを押すと日本語入力が終了します。
●入力完了後、strREPall関数を呼び出します。
●関数に渡す引数は、str1,str2,str3およびstr4(置換後文字列)です。
 ≫ソースファイルのダウンロード: mojiretu001.c
【問題】
●いろいろな文字列を入力して確認してみよう。
●str2(検索文字列)の文字数が0のとき、strstr関数はstr1のアドレスを
 返す場合があり、while文は無限ループになります。これを回避できる
 ように改造してみよう。
 ※無限ループは、Ctrl+Cキーで強制終了できます。


/**********************/
/*  文字列操作(1)  */
/*  文字列置き換え    */
/**********************/
#include <stdio.h>
#include <string.h>

void  strREPall(char*,char*,char*,char*);               // 文字列置き換え


void  main( )
/*----------------*/
/*  主プログラム  */
/*----------------*/
{
   char  str1[256],str2[256],str3[256],str4[256];

   printf("\n\n\n★文字列置き換え★\n");

   printf("\n元の文字列: "); fflush(stdout);
   gets(str1);                                          // キーボードから入力

   printf("\n検索文字列: "); fflush(stdout);
   gets(str2);                                          // キーボードから入力

   printf("\n置換文字列: "); fflush(stdout);
   gets(str3);                                          // キーボードから入力

   strREPall(str1,str2,str3,str4);                      // 文字列置き換え

   printf("\n\n結果文字列: %s\n",str4);
}


void  strREPall(
/*----------------------------------------*/
/*  文字列置き換え                        */
/*                                        */
/*  文字列str1中の文字部分列str2を、      */
/*  すべてstr3に置き換え、str4に格納する  */
/*----------------------------------------*/
char  *str1,
char  *str2,
char  *str3,
char  *str4)
{
  char  *cp,*cpO;
  int   len,len2;

    str4[0]='\0';
    len2=strlen(str2);
    cpO=str1;                                           // 検索開始位置

    while( 1 )
      {
        cp=strstr(cpO,str2);                            // 文字部分列検索
        if ( cp==NULL ) break;                          // str2なし

        len=cp-cpO;
        strncat(str4,cpO,len);                          // str2まで追加
        strcat(str4,str3);                              // str3を追加

        cpO=cp+len2;                                    // 検索開始位置
      }

    strcat(str4,cpO);                                   // 残りを追加
}
   

※SSL暗号化通信対応

佐伯英子技術士事務所 〒542-0073 大阪市中央区日本橋 1-14-13 サンオフィス日本橋601  E-mail: info@saeki-pe.com