C言語:文字列のコピー・結合・比較

photo credit: Factor Scrabble via photopin (license)
photo credit: Factor Scrabble via photopin (license)
photo credit: Factor Scrabble via photopin (license)

文字列関数のコピー、結合、比較と乱数を習いました。

来年4月に行われる、情報処理技術者試験のパンフレットをもらいました。
基本情報を受けたいと思います。
試験勉強はいつ頃始めたら間に合うんでしょう。
今はまだ、余裕ないなぁ・・・

以下、今日の復習です。

文字列のコピー・結合・比較

結果表示

●初期の文字列は下記の通り
 hai1=abcde
 hai2=
 hai3=defgh

●hai2にhai1をコピー
 hai2=abcde

●hai2にhai1の先頭から三文字をコピー
 hai2=abc

●hai2にhai3を連結
 hai2=abcdefgh

●hai2にhai1の先頭から三文字を連結
 hai2=abcdefghabc

●hai2とhai4の比較
 hai2=abcdefghabc hai4=abcdefgh
 hai2とhai4は違う。

●hai2とhai4の先頭二文字を比較
 hai2=abcdefghabc hai4=abcdefgh
 hai2とhai4の先頭二文字は一緒。

ソース

/* 文字列操作関数 */
#include
#include

int main(void)
{
    char hai1[20]="abcde";
    char hai2[20]="";
    char hai3[20]="defgh";
    char hai4[20]="abcdefgh";
    int i;
    
    printf("●初期の文字列は下記の通り\n");
    printf(" hai1=%s\n",hai1);
    printf(" hai2=%s\n",hai2);
    printf(" hai3=%s\n",hai3);
    
    /* hai2にhai1をコピー */
    printf("\n●hai2にhai1をコピー\n");
    strcpy(hai2,hai1);
    printf(" hai2=%s\n",hai2);
    
    /* hai2をzで上書き */
    for(i=0;i<=19;i++){
        hai2[i]='z';
    }
    
    /* hai2にhai1の先頭から三文字をコピー */
    printf("\n●hai2にhai1の先頭から三文字をコピー\n");
    strncpy(hai2,hai1,3);
    hai2[3]=0; /* NULLを入れること */
    printf(" hai2=%s\n",hai2);
    
    /* hai2にhai3を連結 */
    printf("\n●hai2にhai3を連結\n");
    strcat(hai2,hai3);
    printf(" hai2=%s\n",hai2);

    /* hai2にhai1の先頭から三文字を連結 */
    printf("\n●hai2にhai1の先頭から三文字を連結\n");
    strncat(hai2,hai1,3);
    printf(" hai2=%s\n",hai2);
    
    /* hai2とhai4の比較 */
    printf("\n●hai2とhai4の比較\n");
    printf(" hai2=%s hai4=%s\n",hai2,hai4);
    if(strcmp(hai2,hai4)==0)
        printf(" hai2とhai4は一緒。\n");
    else
        printf(" hai2とhai4は違う。\n");
    
    /* hai2とhai4の先頭二文字を比較 */
    printf("\n●hai2とhai4の先頭二文字を比較\n");
    printf(" hai2=%s hai4=%s\n",hai2,hai4);
    if(strncmp(hai2,hai4,2)==0)
        printf(" hai2とhai4の先頭二文字は一緒。\n");
    else
        printf(" hai2とhai4の先頭二文字は違う。\n");
    
    return 0;
}