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

C++のiswpunct()関数とは?構文・動作・戻り値をわかりやすく解説

本記事では、C++のiswpunct()関数について、その構文、動作の仕組み、そして戻り値を詳しく解説します。

iswpunct()関数は、C++の<cwctype>ヘッダーファイルで定義されている組み込み関数です。この関数は、引数として渡されたワイド文字が区切り文字(句読点・記号)であるかどうかを判定します。

iswpunct()は、ispunct()関数のワイド文字版に相当する関数です。つまり、ispunct()と同じ動作をしますが、ワイド文字に対応している点が異なります。引数が区切り文字であれば0以外の整数値(真)を返し、そうでなければ0(偽)を返します。

区切り文字として判定される文字

以下の記号類が区切り文字として判定されます。

! @ # $ % ^ & * ( ) " ' , . / ; [ { } ] : ?

構文

int iswpunct(wint_t ch);

この関数は、判定対象となるワイド文字という1つのパラメータのみを受け取ります。引数はwint_t型またはWEOFにキャストされます。

wint_tは整数型のデータを格納するための型です。

戻り値

関数は整数値を返します。戻り値は以下のいずれかです。

  • 0以外の値:引数が区切り文字の場合(真)
  • 0:引数が区切り文字でない場合(偽)

使用例1:単一文字の判定

まず、個別の文字が区切り文字かどうかを判定する基本的な例を見てみましょう。

#include <iostream>
#include <cwctype>
using namespace std;
int main() {
    wint_t a = '.';
    wint_t b = 'a';
    wint_t c = '1';
    iswpunct(a)?cout<<"\n区切り文字です":cout<<"\n区切り文字ではありません";
    iswpunct(b)?cout<<"\n区切り文字です":cout<<"\n区切り文字ではありません";
    iswpunct(c)?cout<<"\n区切り文字です":cout<<"\n区切り文字ではありません";
}

出力結果

上記のコードを実行すると、以下の出力が生成されます。

区切り文字です
区切り文字ではありません
区切り文字ではありません

ピリオド(.)は区切り文字と判定されますが、英字の「a」や数字の「1」は区切り文字ではないため、0が返されていることがわかります。

使用例2:文字列内の区切り文字をカウント

次に、ワイド文字列に含まれる区切り文字の数を数える実用的な例を紹介します。

#include <iostream>
#include <cwctype>
using namespace std;
int main () {
    int i, count;
    wchar_t s[] = L"@tutorials, point!!";
    count = i = 0;
    while (s[i]) {
        if(iswpunct(s[i]))
        count++;
        i++;
    }
    cout<<"区切り文字は "<<count <<" 個あります。\n";
    return 0;
}

出力結果

上記のコードを実行すると、以下の出力が生成されます。

区切り文字は 4 個あります。

この例では、文字列「@tutorials, point!!」に含まれる「@」「,」「!」「!」の4文字が区切り文字としてカウントされています。whileループで文字列を1文字ずつ走査し、iswpunct()が真を返すたびにカウンタを増やすことで、区切り文字の総数を求めています。

まとめ

iswpunct()関数は、ワイド文字が区切り文字かどうかを簡単に判定できる便利な関数です。文字列の解析やテキスト処理において、記号の検出やカウントが必要な場面で活用できます。<cwctype>ヘッダーをインクルードするだけで利用できるため、ワイド文字を扱うプログラムでぜひ活用してみてください。

  1. C++ STLのcosh()関数とは?双曲線余弦の求め方をサンプルコード付きで解説

    cosh()関数とは? C++のSTLに組み込まれているcosh()関数は、ラジアン単位で与えられた角度の双曲線余弦(ハイパボリック・コサイン)を計算して返す関数です。使用するには、<cmath>ヘッダーをインクルードする必要があります。 双曲線余弦は、数学的に次の式で定義されます。 cosh(x) = (e^x + e^(-x)) / 2 構文 cosh()関数の構文は以下の通りです。 cosh(var) 構文から分かるように、cosh()関数はfloat型、double型、long double型のいずれかの引数varを受け取ります。そして、その双曲線余弦を返します。なお、引

  2. C++ STLのsinh()関数の使い方を徹底解説

    sinh()関数とはsinh()関数は、ラジアンで指定された値の双曲線正弦(ハイパボリックサイン)を返す関数です。C++のSTL(標準テンプレートライブラリ)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。双曲線正弦は、以下の数式で定義されます。sinh(x) = (e^x − e^−x) / 2sinh()関数の構文sinh()関数の構文は以下のとおりです。sinh(var)構文からわかるように、sinh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。戻り値は、varの双曲線正弦です。sin