C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のiscntrl()関数とは?制御文字の判定方法をわかりやすく解説

C++のiscntrl()関数は、指定された文字が制御文字(コントロール文字)であるかどうかを判定するための関数です。この関数は ctype.h ヘッダーファイル内で定義されており、改行(\n)やタブ(\t)など、画面に直接表示されない特殊な文字をチェックする際に活用されます。

iscntrl()関数の構文

iscntrl()関数の基本的な構文は以下のとおりです。

int iscntrl ( int ch );

引数 ch には、判定対象となる文字を渡します。文字が制御文字であれば0以外の値(真)を返し、制御文字でなければ0(偽)を返します。

例1:文字列に含まれる制御文字の数をカウントする

次のプログラムでは、iscntrl()関数を使って文字列内に含まれる制御文字の個数を数えています。

#include <iostream>
#include <ctype.h>

using namespace std;
int main() {
    char str[] = "Coding\tis\tfun\n";
    int i, count = 0;

    for(i=0; str[i]!='\0';i++) {
        if(iscntrl(str[i]))
        count++;
    }
    cout<<"Number of control characters in the string are "<<count;
    return 0;
}

実行結果

Number of control characters in the string are 3

プログラムの解説

このプログラムでは、まず文字列 str を定義しています。この文字列にはタブ文字(\t)が2つと改行文字(\n)が1つ含まれており、合計3つの制御文字があります。

続いてforループを使い、文字列の各文字を先頭から順番に取り出して、iscntrl()関数で制御文字かどうかを判定します。制御文字である場合はカウンタ変数 count を1ずつ増やしていきます。最後に、ループが終了した時点での count の値を出力しています。

char str[] = "Coding\tis\tfun\n";
int i, count = 0;
for(i=0; str[i]!='\0';i++) {
    if(iscntrl(str[i]))
    count++;
}
cout<<"Number of control characters in the string are "<<count;

例2:指定した文字が制御文字かどうかを判定する

次に、単一の文字が制御文字であるかどうかを判定するプログラムの例を紹介します。

#include <iostream>
#include <ctype.h>

using namespace std;
int main() {
    char ch1 = 'A';
    char ch2 = '\n';

    if(iscntrl(ch1))
    cout<<"ch1 is a control character"<<endl;

    else
    cout<<"ch1 is not a control character"<<endl;

    if(iscntrl(ch2))
    cout<<"ch2 is a control character"<<endl;

    else
    cout<<"ch2 is not a control character"<<endl;
    return 0;
}

実行結果

ch1 is not a control character
ch2 is a control character

プログラムの解説

このプログラムでは、2つの文字変数 ch1(文字'A')と ch2(改行文字'\n')を定義しています。その後、if文と組み合わせてiscntrl()関数を呼び出し、それぞれが制御文字かどうかを判定して結果を表示します。

アルファベットの 'A' は通常の表示可能な文字なので「制御文字ではない」と判定され、改行文字 '\n' は制御文字に該当するため「制御文字である」と判定されます。

char ch1 = 'A';
char ch2 = '\n';

if(iscntrl(ch1))
cout<<"ch1 is a control character"<<endl;

else
cout<<"ch1 is not a control character"<<endl;

if(iscntrl(ch2))
cout<<"ch2 is a control character"<<endl;
else
cout<<"ch2 is not a control character"<<endl;

まとめ

iscntrl()関数を使用することで、文字列のサニタイズや入力データの検証などにおいて、画面に表示されない制御文字を簡単に検出できます。テキスト処理を行うプログラムでは、意図しない制御文字を除去・確認したい場面が多いため、本関数の使い方を覚えておくと非常に便利です。

  1. C++のswap()関数とは?2つの変数の値を入れ替える方法をサンプルコード付きで解説

    swap()関数とは C++のswap()関数は、2つの値を入れ替える(交換する)ための関数です。この関数を利用すれば、一時的な第三の変数を自分で用意することなく、2つの変数の値を簡単に入れ替えることができます。 swap()関数の構文 void swap(int variable_name1, int variable_name2); 変数に値を代入してswap()関数に渡した場合、関数内では値の入れ替えが行われますが、呼び出し元の実際の変数の値は変わりません。これは、引数が「値渡し」で渡されるためです。実際の変数の値を入れ替えたい場合は、後述する「参照渡し」を使用します。 例1:s

  2. 【PHP】ctype_cntrl()関数の使い方 – 制御文字の判定方法

    ctype_cntrl()関数とはPHPのctype_cntrl()関数は、文字列に含まれるすべての文字が制御文字であるかどうかをチェックする関数です。現在のロケール設定に基づいて判定が行われ、すべての文字が制御文字であればTRUE、1つでも制御文字以外が含まれていればFALSEを返します。制御文字とは、改行(\n)、キャリッジリターン(\r)、タブ(\t)、エスケープ文字など、画面上に直接表示されない特殊な文字のことです。構文ctype_cntrl(str)パラメータstr − チェック対象の文字列を指定します。戻り値文字列内のすべての文字が現在のロケールにおける制御文