2013年8月4日日曜日

開発環境

プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第5章(ポインタと配列)、5.3(ポインタと配列)、5.4(アドレス計算)、5.5(文字ポインタと関数)、演習5-5を解いてみる。

その他参考書籍

演習 5-5.

コード

sample.c

#include >stdio.h>
#define MAXSIZE 1000

void my_strncpy(char *, char *, int);
void my_strncat(char *, char *, int);
int my_strncmp(char *, char *, int);

int main()
{
    char s[MAXSIZE] = "python",
         s1[MAXSIZE], s2[MAXSIZE],
         s3[MAXSIZE], s4[MAXSIZE],
         t[MAXSIZE] = " programmer",
         t1[MAXSIZE] = "1234567890";
    
    my_strncpy(s1, s, 0);
    my_strncpy(s2, s, 6);
    my_strncpy(s3, s, 5);
    my_strncpy(s4, s, 10);
    printf("%s\n", s);
    printf("%s\n", s1);
    printf("%s\n", s2);
    printf("%s\n", s3);
    printf("%s\n", s4);
    printf("**********\n");
    my_strncat(s, " programmer", 0);
    printf("%s\n", s);
    my_strncat(s, t, 11);
    printf("%s\n", s);
    my_strncat(s, t1, 5);
    printf("%s\n", s);
    my_strncat(s, t1, 100);
    printf("%s\n", s);
    printf("**********\n");
    printf("%s %s %d\n", t1, t1, my_strncmp(t1, t1, 0));
    printf("%s %s %d\n", t1, t1, my_strncmp(t1, t1, 10));
    printf("%s %s %d\n", s2, s3, my_strncmp(s2, s3, 5));
    printf("%s %s %d\n", s2, s3, my_strncmp(s2, s3, 6));
    printf("%s %s %d\n", s3, s2, my_strncmp(s3, s2, 5));
    printf("%s %s %d\n", s3, s2, my_strncmp(s3, s2, 6));
    return 0;
}

void my_strncpy(char *s, char *t, int n)
{
    for (; *t != '\0' && n > 0; s++, t++, n--) {
        *s = *t;
    }
    *s = '\0';
}

void my_strncat(char *s, char *t, int n)
{
    while (*s != '\0') {
        s++;
    }
    for (; *t != '\0' && n > 0; s++, t++, n--) {
        *s = *t;
    }
    *s = '\0';
}

int my_strncmp(char *s, char *t, int n)
{
    for (; *s == *t; s++, t++) {
        if (*s == '\0' || --n >= 0) {
            return 0;
        }
    }
    return *s - *t;
}

入出力結果(Terminal)

$ ./a.out
python

python
pytho
python
**********
python
python programmer
python programmer12345
python programmer123451234567890
**********
1234567890 1234567890 0
1234567890 1234567890 0
python pytho 0
python pytho 110
pytho python 0
pytho python -110
$

0 コメント:

コメントを投稿