【C言語】文字列が空文字か判定する方法を解説

この記事では、C言語を使って文字列が空文字かどうかを判定する方法について解説します。

具体的には、文字列の長さを確認する方法や、文字列の先頭文字を確認する方法を学びます。

また、これらの方法を使って空文字判定を関数化し、複数の文字列を一括で判定する方法も紹介します。

目次から探す

文字列の判定方法

C言語で文字列が空文字かどうかを判定する方法はいくつかあります。

ここでは、文字列の長さを確認する方法と、文字列の先頭文字を確認する方法について詳しく解説します。

文字列の長さを確認する方法

文字列の長さを確認する方法として、標準ライブラリの strlen 関数を使用する方法があります。

strlen 関数は、文字列の長さ(終端のヌル文字 '\0' を除く)を返します。

strlen 関数の使い方

strlen 関数の使い方は非常に簡単です。

以下に基本的な使用例を示します。

#include <stdio.h>
#include <string.h>
int main() {
    char str1[] = "Hello, World!";
    char str2[] = "";
    printf("str1の長さ: %lu\n", strlen(str1));
    printf("str2の長さ: %lu\n", strlen(str2));
    return 0;
}

このプログラムを実行すると、以下のような出力が得られます。

str1の長さ: 13
str2の長さ: 0

strlen を使った空文字の判定方法

strlen 関数を使って文字列が空文字かどうかを判定する方法は、返り値が0であるかどうかを確認することです。

以下にその例を示します。

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "";
    if (strlen(str) == 0) {
        printf("文字列は空です。\n");
    } else {
        printf("文字列は空ではありません。\n");
    }
    return 0;
}

このプログラムを実行すると、以下のような出力が得られます。

文字列は空です。

先頭文字を確認する方法

文字列が空文字かどうかを判定するもう一つの方法は、文字列の先頭文字を確認することです。

C言語では、文字列の終端はヌル文字 '\0' で示されます。

したがって、文字列の先頭が '\0' であれば、その文字列は空文字と判定できます。

文字列の先頭文字を確認する方法

文字列の先頭文字を確認する方法は、文字列の最初の要素が '\0' であるかどうかをチェックすることです。

以下にその例を示します。

#include <stdio.h>
int main() {
    char str[] = "";
    if (str[0] == '\0') {
        printf("文字列は空です。\n");
    } else {
        printf("文字列は空ではありません。\n");
    }
    return 0;
}

このプログラムを実行すると、以下のような出力が得られます。

文字列は空です。

先頭文字が '\0' であるかを確認する方法

先頭文字が '\0' であるかを確認する方法は、上記の例と同様です。

文字列の最初の要素が '\0' であるかどうかをチェックすることで、文字列が空文字かどうかを判定できます。

#include <stdio.h>
int main() {
    char str[] = "";
    if (str[0] == '\0') {
        printf("文字列は空です。\n");
    } else {
        printf("文字列は空ではありません。\n");
    }
    return 0;
}

このプログラムを実行すると、以下のような出力が得られます。

文字列は空です。

以上のように、C言語では strlen 関数を使う方法と、文字列の先頭文字を確認する方法の2つの方法で文字列が空文字かどうかを判定することができます。

どちらの方法も簡単に実装できるので、状況に応じて使い分けてください。

応用例

空文字判定を関数化する

文字列が空文字かどうかを判定する処理を関数化することで、コードの再利用性が向上し、可読性も高まります。

ここでは、空文字判定を行う関数を定義し、その実装方法を解説します。

関数の定義と実装

まず、空文字判定を行う関数 isEmptyString を定義します。

この関数は、引数として文字列を受け取り、その文字列が空文字であれば 1 を、そうでなければ 0 を返します。

以下に関数の定義と実装を示します。

#include <stdio.h>
#include <string.h>
// 空文字判定関数の定義
int isEmptyString(const char *str) {
    // 文字列の長さが0であれば空文字と判定
    if (strlen(str) == 0) {
        return 1; // 空文字
    } else {
        return 0; // 空文字ではない
    }
}

関数の使用例

次に、上記で定義した isEmptyString 関数を使用して、文字列が空文字かどうかを判定する例を示します。

#include <stdio.h>
#include <string.h>
// 空文字判定関数の定義
int isEmptyString(const char *str) {
    if (strlen(str) == 0) {
        return 1;
    } else {
        return 0;
    }
}
int main() {
    char str1[] = "";
    char str2[] = "Hello, World!";
    if (isEmptyString(str1)) {
        printf("str1は空文字です。\n");
    } else {
        printf("str1は空文字ではありません。\n");
    }
    if (isEmptyString(str2)) {
        printf("str2は空文字です。\n");
    } else {
        printf("str2は空文字ではありません。\n");
    }
    return 0;
}

このプログラムを実行すると、以下のような結果が得られます。

str1は空文字です。
str2は空文字ではありません。

複数の文字列を一括で判定する方法

複数の文字列を一括で判定する場合、配列とループを組み合わせて効率的に処理を行うことができます。

配列を使った空文字判定

まず、複数の文字列を配列に格納し、その配列を使って空文字判定を行う方法を示します。

#include <stdio.h>
#include <string.h>
// 空文字判定関数の定義
int isEmptyString(const char *str) {
    if (strlen(str) == 0) {
        return 1;
    } else {
        return 0;
    }
}
int main() {
    // 文字列の配列を定義
    const char *strings[] = {"", "Hello", "World", "", "C programming"};
    int numStrings = sizeof(strings) / sizeof(strings[0]);
    for (int i = 0; i < numStrings; i++) {
        if (isEmptyString(strings[i])) {
            printf("strings[%d]は空文字です。\n", i);
        } else {
            printf("strings[%d]は空文字ではありません。\n", i);
        }
    }
    return 0;
}

このプログラムを実行すると、以下のような結果が得られます。

strings[0]は空文字です。
strings[1]は空文字ではありません。
strings[2]は空文字ではありません。
strings[3]は空文字です。
strings[4]は空文字ではありません。

ループを使った空文字判定

上記の例では for ループを使用して配列内の各文字列を順に判定しました。

ループを使うことで、任意の数の文字列に対して効率的に空文字判定を行うことができます。

以下に、ループを使った空文字判定の例を示します。

#include <stdio.h>
#include <string.h>
// 空文字判定関数の定義
int isEmptyString(const char *str) {
    if (strlen(str) == 0) {
        return 1;
    } else {
        return 0;
    }
}
int main() {
    // 文字列の配列を定義
    const char *strings[] = {"", "Hello", "World", "", "C programming"};
    int numStrings = sizeof(strings) / sizeof(strings[0]);
    // ループを使って空文字判定を行う
    for (int i = 0; i < numStrings; i++) {
        if (isEmptyString(strings[i])) {
            printf("strings[%d]は空文字です。\n", i);
        } else {
            printf("strings[%d]は空文字ではありません。\n", i);
        }
    }
    return 0;
}

このプログラムを実行すると、先ほどと同じ結果が得られます。

strings[0]は空文字です。
strings[1]は空文字ではありません。
strings[2]は空文字ではありません。
strings[3]は空文字です。
strings[4]は空文字ではありません。

以上のように、空文字判定を関数化し、配列とループを使って複数の文字列に対して効率的に判定を行う方法を解説しました。

これにより、コードの再利用性と可読性が向上し、より効率的なプログラミングが可能となります。

目次から探す