C/C++のiswgraph()関数の使い方を例付きで解説
この記事では、C++ STLで提供されているiswgraph()関数の仕組み、構文、そして具体的な使用例について詳しく解説します。
iswgraph()は、<cwctype>ヘッダーファイルに定義されている関数で、指定されたワイド文字が「グラフィカルな表現」(画面上に表示できる文字)を持っているかどうかを判定するために使われます。この関数は、<cctype>ヘッダーにあるisgraph()関数のワイド文字版に相当します。
グラフィカルな表現を持つワイド文字とは?
画面上に出力できるすべてのワイド文字が、グラフィカルな表現を持つ文字に該当します。反対に、改行(\n)やタブ(\t)などのエスケープ文字(制御文字)は画面に直接表示されないため、グラフィカルな表現を持ちません。
構文
int iswgraph(ch);
パラメータ
この関数が受け取る引数は1つだけです。
- ch:判定対象のワイド文字(wchar_t型)
戻り値
整数値を返します。
- ワイド文字がグラフィカルな表現を持たない場合:0
- ワイド文字がグラフィカルな表現を持つ場合:0以外の値
使用例
入力:iswgraph('?');
出力:グラフィカルな表現があります。
入力:iswgraph(' ');
出力:グラフィカルな表現がありません。
例1:記号文字の判定
#include <cwctype>
#include <iostream>
using namespace std;
int main() {
wchar_t ch_1 = '%';
wchar_t ch_2 = ')';
if (iswgraph(ch_1))
wcout << "It has graphical representation: " << ch_1;
else
wcout << "It doesn't have graphical representation: " << ch_1;
if (iswgraph(ch_2))
wcout << "\nIt has graphical representation: " << ch_2;
else
wcout << "\nIt doesn't have graphical representation: " << ch_2;
return 0;
}
出力
上記のコードを実行すると、以下の出力が得られます。
It has graphical representation: % It has graphical representation: )
「%」と「)」はどちらも画面に表示可能な記号であるため、iswgraph()は両方に対して真(0以外)を返します。
例2:数字とエスケープ文字の判定
#include <cwctype>
#include <iostream>
using namespace std;
int main() {
wchar_t ch_1 = '9';
wchar_t ch_2 = '\n';
if (iswgraph(ch_1))
wcout << "It has graphical representation: " << ch_1;
else
wcout << "It doesn't have graphical representation: " << ch_1;
if (iswgraph(ch_2))
wcout << "\nIt has graphical representation: " << ch_2;
else
wcout << "\nIt doesn't have graphical representation: " << ch_2;
return 0;
}
出力
上記のコードを実行すると、以下の出力が得られます。
It has graphical representation: 9 It doesn't have graphical representation:
数字の「9」は画面に表示できる文字なのでグラフィカルな表現を持ちますが、改行を表す「\n」はエスケープ文字であり画面に表示されないため、グラフィカルな表現を持たないと判定されます。
まとめ
iswgraph()関数を使えば、ワイド文字が画面に表示できる文字(グラフィカルな表現を持つ文字)かどうかを簡単に判定できます。英数字や記号などの表示可能な文字には0以外の値が返り、スペースや改行といった空白類・制御文字には0が返るという点を覚えておきましょう。ワイド文字列の入力バリデーションや整形処理などで活用できる便利な関数です。
-
C++のサンプルコードで学ぶDisarium数(ディザリウム数)の判定方法
Disarium数とは?各桁の数字を、その桁の位置(最上位を1として左から順に1、2、3…)でべき乗し、その合計が元の数そのものと等しくなるような数をDisarium数(ディザリウム数)と呼びます。例えば、518は次のように計算できます。5^1 + 1^2 + 8^3 = 5 + 1 + 512 = 518合計が元の数と一致しているため、518はDisarium数です。他にも 89、135、175、598 などがDisarium数の例として知られています。noOfDigits関数:桁数を求めるnoOfDigits(int num) 関数は、引数として受け取った数値の桁数を返します。数値を10で
-
C++で解く「3nスライスのピザ」問題 ― 動的計画法でスライスの合計を最大化する方法
問題の概要 大きさがまちまちの 3n 個のスライスからなるピザがあるとします。私と友人2人は、次のルールに従ってピザを取っていきます。 私が任意のスライスを1枚選びます。 友人のAmalは、私が選んだスライスの反時計回り方向に隣接するスライスを取ります。 友人のBimalは、私が選んだスライスの時計回り方向に隣接するスライスを取ります。 ピザのスライスがなくなるまで、この手順を繰り返します。 各スライスの大きさは、時計回りの順に並べた環状配列 slices として与えられます。求めるのは、私が手にできるスライスの大きさの合計の最大値です。 入出力例 入力が [9, 8, 6, 1, 1,