ここでは、文字列の文字数を数える関数、文字列を複写する関数、文字列を連続する関数、文字列を比較する関数を作る。各関数の仕様は以下のとうりとする。
【文字列の複写】
<形式>
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;
}
次へ