C++でASCIIルックアップテーブルを実装するプログラムの解説
本記事では、指定した1文字のASCIIコードに関する情報を取得する「ASCIIルックアップテーブル」をC++で実装する方法を解説します。
ASCIIルックアップテーブルとは?
ASCIIルックアップテーブルとは、ある文字について、8進数・10進数・16進数・HTML数値文字参照の各値を表形式でまとめたものです。文字コードの対応関係をひと目で確認できるため、文字エンコーディングの学習やデバッグの際に役立ちます。
対象となる文字には、アルファベット、数字、空白などの区切り文字、そして各種記号が含まれます。
C++による実装例
以下のプログラムでは、文字 'a' を入力として受け取り、そのASCIIコードを各進数およびHTML表記に変換して出力します。
#include <iostream>
#include <string>
using namespace std;
//10進数を8進数に変換する関数
int Octal(int decimal){
int octal = 0;
string temp = "";
while (decimal > 0) {
int remainder = decimal % 8;
temp = to_string(remainder) + temp;
decimal /= 8;
}
for (int i = 0; i < temp.length(); i++)
octal = (octal * 10) + (temp[i] - '0');
return octal;
}
//10進数を16進数に変換する関数
string Hexadecimal(int decimal){
string hex = "";
while (decimal > 0) {
int remainder = decimal % 16;
if (remainder >= 0 && remainder <= 9)
hex = to_string(remainder) + hex;
else
hex = (char)('A' + remainder % 10) + hex;
decimal /= 16;
}
return hex;
}
//10進数をHTML数値文字参照に変換する関数
string HTML(int decimal){
string html = to_string(decimal);
html = "&#" + html + ";";
return html;
}
//ASCIIルックアップテーブルを計算する関数
void ASCIIlookuptable(char ch){
int decimal = ch;
cout << "Octal value: " << Octal(decimal) << endl;
cout << "Decimal value: " << decimal << endl;
cout << "Hexadecimal value: " << Hexadecimal(decimal) << endl;
cout << "HTML value: " << HTML(decimal);
}
int main(){
char ch = 'a';
ASCIIlookuptable(ch);
return 0;
}
コードの解説
- Octal関数:10進数の値を8進数に変換します。8で割った剰余を順に並べて桁を組み立てます。
- Hexadecimal関数:10進数の値を16進数に変換します。剰余が10以上の場合は、A〜Fの英字に対応付けて処理します。
- HTML関数:10進数の文字コードを「&#数値;」というHTML数値文字参照の形式に整形します。
- ASCIIlookuptable関数:引数として渡された文字を整数(ASCIIコード)に変換し、上記3つの関数を使って各表記の値を出力します。
実行結果
Octal value: 141 Decimal value: 97 Hexadecimal value: 61 HTML value: a
この例では文字 'a' を渡しているため、ASCIIコードは10進数で97、8進数で141、16進数で61となり、HTMLでは「a」と表現されます。
-
C++でグラフの隣接行列を実装する方法【サンプルコード付き解説】
隣接行列とは グラフの隣接行列(Adjacency Matrix)とは、V×Vのサイズを持つ正方行列のことです。ここでVはグラフGの頂点数を表します。行列の行と列にはそれぞれ頂点が対応付けられ、頂点iから頂点jへの辺が存在する場合は、i行目・j列目の要素に1が格納されます(重み付きグラフの場合は、辺の重みなどの非ゼロの値が入ります)。辺が存在しない場合は0が格納されます。 なお、無向グラフの場合、辺は双方向につながりを持つため、隣接行列は必ず対称行列になります。つまり、adj[i][j]とadj[j][i]は常に同じ値となります。 隣接行列表現の計算量 空間計算量: 隣接行列にはO(V²)
-
C++でグラフの隣接リストを実装する方法:サンプルコード付きで解説
グラフの隣接リストは、連結リスト(リンクリスト)を用いたグラフの表現方法の一つです。この表現では、リストを要素とする配列を使用し、その配列のサイズは V(頂点の総数)となります。言い換えれば、V個の異なるリストを格納するための配列を用意することになります。各リストの先頭が頂点 u に対応しており、そのリストには「頂点 u に隣接するすべての頂点」が格納されます。 隣接リスト表現の計算量 無向グラフの場合、必要な記憶領域は O(V + 2E)、有向グラフの場合は O(V + E) となります。 辺の数が増加すると、それに伴って必要なメモリ量も増えていきます。そのため、辺の密度が低い(スパースな