8−3 文字列を操作する関数

ここでは、文字列の文字数を数える関数、文字列を複写する関数、文字列を連続する関数、文字列を比較する関数を作る。各関数の仕様は以下のとうりとする。

 

【文字列の複写】

<形式>

char *_strcpy(char *sl,char *s2)

<引数>

s1:複写先の文字列へのポインタ

s2:複写元の文字列へのポインタ

<返却値>

s1の値

<機能>

s2の指す文字列をs1の指すchar型配列にコピーする。

【文字列の結合】

<形式>

char *_strcat(char *sl,char *s2)

<引数>

s1:複写先で、結合後、先頭の文字列へのポインタ

s2:複写元で、結合後、後ろの文字列へのポインタ

<返却値>

s1の値

<機能>

s2の指す文字列をs1の指す文字列の後ろにコピーする。

【文字列の比較】

<形式>

char *_strcmp(char *sl,char *s2)

<引数>

s1:複写したい文字列へのポインタ

s2:複写したい文字列へのポインタ

<返却値>

s1>s2の時 1

s1=s2の時 0

s1<s2の時 −1

<機能>

s2の指す文字列とs1の指す文字列の大小関係を求める。

【文字列の長さ】

<形式>

int _strlen(char *sl)

<引数>

s1:長さを求めたい文字列へのポインタ

<返却値>

文字列s1の’¥0’の直前までの文字数

<機能>

文字列の’¥0’を含まない文字数を求める。

 

[プログラムの作成]

/*-----------------------------------------------

       文字列操作関数群

-------------------------------------------------*/

char    *_strcpy(char *s1,char *s2);

char    *_strcat(char *s1,char *s2);

int     _strcmp(char *s1,char *s2);

char    _strlen(char *s1);

/*-----------------------------------------------

       文字列の複写

-------------------------------------------------*/

char    *_strcpy(char *s1,char *s2)

         /*s1:複写先の文字列へのポイント*/

         /*s2:複写元の文字列へのポイント*/

      char    *save_s1;    /*s1のセーブ*/

      for(save_s1=s1;*s2!='\0';s1++,s2++) *s1=*s2;

      *s1='\0';

      return(save_s1);

}

 /*-----------------------------------------------

       文字列の連結

-------------------------------------------------*/

char    *_strcat(char *s1,char *s2)

         /*s1:複写先、複写後先頭の文字列へのポイント*/

         /*s2:複写元、複写後後ろの文字列へのポイント*/

      char    *save_s1;    /*s1のセーブ*/

      for(save_s1=s1;*s1!='\0';s1++,);

      for(     ;*s2!='\0';s1++,s2++) *s1=*s2;

      *s1='\0';

      return(save_s1);

}

 /*-----------------------------------------------

       文字列の比較

              戻り値:s1>s2 1

                  s1=s2 0

                  s1<s2 −1

-------------------------------------------------*/

char    *_strcmp(char *s1,char *s2)

         /*s1,s2:比較したい文字列へのポイント*/

     int     kekka;

      for(;*s1!='\0'&&*s2!='\0'&&*s1==*s2;s1++,s2++);

      if   (*s1==*s2) kekka=0;

      else if(*s1>*s2) kekka=1;

      else        kekka=-1;

      return(kekka);

}

 /*-----------------------------------------------

       文字列の長さを求める

-------------------------------------------------*/

int    _strcmp(char *s1)

         /*s1:長さを求める文字列へのポイント*/

     int     len;

      for(len=0;*s1!='\0';len++,s1++);

      return len;

}

 

 

 

次へ