【C言語】文字列に改行が含まれているか判定する方法を解説

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

目次から探す

改行の種類

改行は、プログラミングにおいてテキストの改行を表す特殊な文字です。

C言語では、改行を表すために\nというエスケープシーケンスを使用します。

しかし、改行には他にもいくつかの種類があります。

  • 改行文字 (\n):一般的な改行文字で、テキストの行末を表します。
  • 復帰文字 (\r):改行文字と同様に行末を表しますが、一部のシステムでは改行文字と復帰文字の組み合わせ (\r\n) を使用します。
  • 改行文字 (\v):垂直タブとも呼ばれ、テキストを垂直方向に移動します。
  • 改行文字 (\f):改ページとも呼ばれ、テキストを次のページに移動します。

文字列の改行判定方法

方法1: 文字列を1文字ずつ調べる方法

この方法では、文字列を1文字ずつ調べて改行文字が含まれているかどうかを判定します。

以下にサンプルコードを示します。

#include <stdio.h>
int containsNewLine(char* str) {
    int i = 0;
    while (str[i] != '\0') {
        if (str[i] == '\n') {
            return 1; // 改行文字が含まれている場合
        }
        i++;
    }
    return 0; // 改行文字が含まれていない場合
}
int main() {
    char str1[] = "Hello, World!\n";
    char str2[] = "こんにちは、世界!";
    
    if (containsNewLine(str1)) {
        printf("str1には改行が含まれています。\n");
    } else {
        printf("str1には改行が含まれていません。\n");
    }
    
    if (containsNewLine(str2)) {
        printf("str2には改行が含まれています。\n");
    } else {
        printf("str2には改行が含まれていません。\n");
    }
    
    return 0;
}

上記のコードでは、containsNewLine関数を定義しています。

この関数は、引数として渡された文字列に改行文字が含まれているかどうかを判定します。

whileループを使用して文字列を1文字ずつ調べ、改行文字が見つかった場合には1を返します。

改行文字が見つからなかった場合には0を返します。

方法2: 文字列内の特定の文字列を検索する方法

この方法では、文字列内に特定の文字列が含まれているかどうかを検索します。

改行文字を表す\nを検索することで、改行が含まれているかどうかを判定します。

以下にサンプルコードを示します。

#include <stdio.h>
#include <string.h>
int containsNewLine(char* str) {
    if (strstr(str, "\n") != NULL) {
        return 1; // 改行文字が含まれている場合
    }
    return 0; // 改行文字が含まれていない場合
}
int main() {
    char str1[] = "Hello, World!\n";
    char str2[] = "こんにちは、世界!";
    
    if (containsNewLine(str1)) {
        printf("str1には改行が含まれています。\n");
    } else {
        printf("str1には改行が含まれていません。\n");
    }
    
    if (containsNewLine(str2)) {
        printf("str2には改行が含まれています。\n");
    } else {
        printf("str2には改行が含まれていません。\n");
    }
    
    return 0;
}

上記のコードでは、containsNewLine関数を定義しています。

この関数は、引数として渡された文字列に改行文字 (\n) が含まれているかどうかを判定します。

strstr関数を使用して文字列内に\nが含まれているかどうかを検索し、見つかった場合には1を返します。

見つからなかった場合には0を返します。

これらの方法で文字列に改行が含まれているかどうか判定することができます。

方法3: 正規表現を使用する方法

この方法では、正規表現を使用して文字列内に改行が含まれているかどうかを判定します。

C言語では、正規表現を扱うためのライブラリがいくつか利用できます。

以下にサンプルコードを示します。

#include <stdio.h>
#include <regex.h>
int containsNewLine(char* str) {
    regex_t regex;
    int ret;
    
    ret = regcomp(&regex, "\n", 0);
    if (ret != 0) {
        return -1; // 正規表現のコンパイルに失敗した場合
    }
    
    ret = regexec(&regex, str, 0, NULL, 0);
    regfree(&regex);
    
    if (ret == 0) {
        return 1; // 改行文字が含まれている場合
    } else if (ret == REG_NOMATCH) {
        return 0; // 改行文字が含まれていない場合
    } else {
        return -1; // 正規表現の実行に失敗した場合
    }
}
int main() {
    char str1[] = "Hello, World!\n";
    char str2[] = "こんにちは、世界!";
    
    if (containsNewLine(str1)) {
        printf("str1には改行が含まれています。\n");
    } else {
        printf("str1には改行が含まれていません。\n");
    }
    
    if (containsNewLine(str2)) {
        printf("str2には改行が含まれています。\n");
    } else {
        printf("str2には改行が含まれていません。\n");
    }
    
    return 0;
}

上記のコードでは、containsNewLine関数を定義しています。

この関数は、引数として渡された文字列に改行文字 (\n) が含まれているかどうかを判定します。

regex_t構造体を使用して正規表現をコンパイルし、regexec関数を使用して文字列内に改行文字が含まれているかどうかを検索します。

見つかった場合には1を返し、見つからなかった場合には0を返します。

正規表現のコンパイルや実行に失敗した場合には-1を返します。

以上が、C言語で文字列に改行が含まれているかどうかを判定する方法の解説です。

方法1では文字列を1文字ずつ調べる方法、方法2では特定の文字列を検索する方法、方法3では正規表現を使用する方法を紹介しました。

適切な方法を選んで、改行の判定を行ってください。

目次から探す