2.8 インクレメントとデクレメントの演算子, 演習2-4, 演習2-5 K&R プログラミング言語C

インクリメント(及びデクリメント)演算子の前置と後置の違い。

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i, j;

    i = j = 10;
    printf("i++ => %d\n", i++); /* 印字してからインクリメント */
    printf("++j => %d\n", ++j); /* インクリメントしてから印字 */
    printf("i => %d\nj => %d\n", i, j);

    return 0;
}

実行結果

$ ./increment
i++ => 10
++j => 11
i => 11
j => 11

演習2-4

#include <stdio.h>
#include <string.h>

void squeeze(char s1[], char s2[]);

int main(int argc, char *argv[])
{
    char *str0 = "hello, world";
    char str1[1024];
    char *str2 = "el";

    strcpy(str1, str0); /* 文字列リテラルは変更できないのでコピーを作る。 */
    printf("str1 : %s\n", str1);
    printf("str2 : %s\n", str2);
    squeeze(str1, str2);
    printf("%s\n", str1);

    return 0;
}

void squeeze(char s1[], char s2[])
{
    int i, j, k;

    for (k = 0; s2[k] != '\0'; k++) {
        for (i = j = 0; s1[i] != '\0'; i++) {
            if (s1[i] != s2[k]) {
                s1[j++] = s1[i];
            }
        }
        s1[j] = '\0';
    }
}

実行結果

$ ./ex2-4
str1 : hello, world
str2 : el
ho, word

演習2-5

#include <stdio.h>
#include <string.h>

int any(char s1[], char s2[]);

int main(int argc, char *argv[])
{
    char *str0 = "hello, world";
    char str1[1024];
    char *str2 = "lo";

    strcpy(str1, str0); /* 文字列リテラルは変更できないのでコピーを作る。 */
    printf("str1 : %s\n", str1);
    printf("str2 : %s\n", str2);
    printf("%d\n", any(str1, str2));

    return 0;
}

int any(char s1[], char s2[])
{
    int i, j;

    for (j = 0; s2[j] != '\0'; j++) {
        for (i = 0; s1[i] != '\0'; i++) {
            if (s1[i] == s2[j]) {
                return i;
            }
        }
    }
    return -1;
}

実行結果

$ ./ex2-5
str1 : hello, world
str2 : lo
2
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»