【C言語】文字列に空白(スペース)が含まれているか判定する方法

C言語で文字列に空白(スペース)が含まれているかを判定する方法について学びましょう。

この記事では、基本的な考え方から標準ライブラリを使った方法、手動でのチェック方法、さらには応用例として複数の空白文字の判定や文字列の前後の空白を取り除く方法まで、初心者にもわかりやすく解説します。

目次から探す

文字列に空白が含まれているかを判定する方法

C言語で文字列に空白(スペース)が含まれているかを判定する方法について解説します。

文字列の中に空白が含まれているかどうかを確認することは、入力データの検証やフォーマットの整形など、さまざまな場面で役立ちます。

基本的な考え方

文字列の各文字を順にチェックする方法

文字列に空白が含まれているかを判定する基本的な方法は、文字列の各文字を順にチェックすることです。

C言語では、文字列は文字の配列として扱われるため、ループを使って各文字を順に確認することができます。

空白文字を見つけたら判定を終了する方法

空白文字を見つけたら、そこで判定を終了する方法もあります。

これにより、無駄な処理を省くことができ、効率的に空白の有無を確認できます。

標準ライブラリを使った方法

isspace関数の紹介

C言語の標準ライブラリには、文字が空白文字かどうかを判定するための便利な関数が用意されています。

その一つがisspace関数です。

この関数は、文字が空白文字(スペース、タブ、改行など)であるかどうかを判定します。

isspace関数の使い方と例

isspace関数を使うことで、簡単に文字列に空白が含まれているかを判定できます。

以下に、isspace関数を使った例を示します。

#include <stdio.h>
#include <ctype.h>
int main() {
    char str[] = "Hello World";
    int i = 0;
    int hasSpace = 0;
    while (str[i] != '\0') {
        if (isspace(str[i])) {
            hasSpace = 1;
            break;
        }
        i++;
    }
    if (hasSpace) {
        printf("文字列に空白が含まれています。\n");
    } else {
        printf("文字列に空白は含まれていません。\n");
    }
    return 0;
}

このプログラムでは、文字列 Hello World に空白が含まれているかを判定しています。

isspace関数を使って各文字をチェックし、空白が見つかったらフラグを立ててループを終了します。

手動で空白をチェックする方法

ループを使った文字列の走査

標準ライブラリを使わずに手動で空白をチェックする方法もあります。

ループを使って文字列の各文字を走査し、空白文字を見つけたらフラグを立てる方法です。

if文を使った空白文字の判定

以下に、手動で空白をチェックする方法の例を示します。

#include <stdio.h>
int main() {
    char str[] = "Hello World";
    int i = 0;
    int hasSpace = 0;
    while (str[i] != '\0') {
        if (str[i] == ' ') {
            hasSpace = 1;
            break;
        }
        i++;
    }
    if (hasSpace) {
        printf("文字列に空白が含まれています。\n");
    } else {
        printf("文字列に空白は含まれていません。\n");
    }
    return 0;
}

このプログラムでは、文字列 Hello World に空白が含まれているかを手動でチェックしています。

if文を使って各文字がスペースかどうかを判定し、空白が見つかったらフラグを立ててループを終了します。

以上の方法を使うことで、C言語で文字列に空白が含まれているかを簡単に判定することができます。

標準ライブラリを使う方法と手動でチェックする方法の両方を理解しておくと、さまざまな場面で役立つでしょう。

応用例

複数の空白文字を判定する

スペース以外の空白文字(タブ、改行など)を含む判定方法

C言語では、空白文字にはスペースだけでなく、タブや改行なども含まれます。

これらの空白文字をすべて判定するためには、標準ライブラリのisspace関数を使うと便利です。

この関数は、与えられた文字が空白文字であるかどうかを判定します。

isspace関数は、以下のような空白文字を判定します:

文字説明
' 'スペース
'\t'タブ
'\n'改行
'\v'垂直タブ
'\f'改頁
'\r'復帰

コード例と解説

以下に、文字列に空白文字が含まれているかどうかを判定するコード例を示します。

#include <stdio.h>
#include <ctype.h>
int contains_whitespace(const char *str) {
    while (*str) {
        if (isspace((unsigned char)*str)) {
            return 1; // 空白文字が見つかった
        }
        str++;
    }
    return 0; // 空白文字が見つからなかった
}
int main() {
    const char *test_str1 = "Hello, World!";
    const char *test_str2 = "Hello,World!";
    if (contains_whitespace(test_str1)) {
        printf("test_str1には空白文字が含まれています。\n");
    } else {
        printf("test_str1には空白文字が含まれていません。\n");
    }
    if (contains_whitespace(test_str2)) {
        printf("test_str2には空白文字が含まれています。\n");
    } else {
        printf("test_str2には空白文字が含まれていません。\n");
    }
    return 0;
}

このコードでは、contains_whitespace関数が文字列を走査し、空白文字が見つかると1を返します。

見つからなければ0を返します。

main関数では、2つの文字列をテストし、それぞれに空白文字が含まれているかどうかを判定しています。

文字列の前後の空白をトリムする

strtok関数を使ったトリム方法

文字列の前後の空白をトリムする方法として、strtok関数を使うことができます。

strtok関数は、文字列を指定した区切り文字で分割するための関数です。

これを利用して、前後の空白を取り除くことができます。

コード例と解説

以下に、文字列の前後の空白をトリムするコード例を示します。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* trim_whitespace(char *str) {
    char *end;
    // 先頭の空白をスキップ
    while (isspace((unsigned char)*str)) str++;
    if (*str == 0)  // すべて空白だった場合
        return str;
    // 末尾の空白をスキップ
    end = str + strlen(str) - 1;
    while (end > str && isspace((unsigned char)*end)) end--;
    // 新しい終端文字を追加
    *(end + 1) = '\0';
    return str;
}
int main() {
    char test_str1[] = "   Hello, World!   ";
    char test_str2[] = "NoSpacesHere";
    printf("'%s'\n", trim_whitespace(test_str1));
    printf("'%s'\n", trim_whitespace(test_str2));
    return 0;
}

このコードでは、trim_whitespace関数が文字列の先頭と末尾の空白を取り除きます。

main関数では、2つの文字列をテストし、それぞれの前後の空白をトリムした結果を表示しています。

このようにして、C言語で文字列に空白が含まれているかを判定したり、文字列の前後の空白をトリムする方法を学ぶことができます。

これらのテクニックは、文字列操作を行う際に非常に役立ちます。

目次から探す