C++で文字列をバイナリ(2進数)列に変換する方法
はじめに
本記事では、C++を使って文字列をバイナリ(2進数)列に変換する方法を解説します。
具体的には、文字列として与えられた各文字を、それぞれ対応する2進数表現に変換し、文字ごとに空白区切りで出力するプログラムを作成します。
処理の流れ
変換の手順は以下のとおりです。
1. 文字列の各文字を取り出し、ASCIIコード(整数値)に変換する
2. ASCIIコードを2進数の文字列に変換する
3. 2進数の桁順を反転して正しい並びに整え、出力する
サンプルコード
#include <bits/stdc++.h>
using namespace std;
// バイナリ(2進数)表現への変換
void convert_binary(string s){
int n = s.length();
for (int i = 0; i <= n; i++){
// ASCIIコード(整数値)へ変換
int val = int(s[i]);
// ASCIIコードを2進数表現へ変換
string bin = "";
while (val > 0){
(val % 2)? bin.push_back('1') :
bin.push_back('0');
val /= 2;
}
reverse(bin.begin(), bin.end());
cout << bin << " ";
}
}
int main(){
string s = "tutorialspoint";
convert_binary(s);
return 0;
}
実行結果
1110100 1110101 1110100 1101111 1110010 1101001 1100001
1101100 1110011 1110000 1101111 1101001 1101110 1110100
コードの解説
このプログラムでは、まず convert_binary 関数内で文字列の長さを取得し、各文字に対してループ処理を行います。
各文字は int(s[i]) によってASCIIコードの整数値に変換されます。その後、while ループの中で2で割った余り(val % 2)を確認し、余りが1なら「1」、0なら「0」を文字列に追加していきます。これにより、2進数の桁が下位の桁から順に格納されるため、最後に reverse 関数を使って文字列を反転させ、正しい桁順の2進数表現を得ています。
なお、各文字の2進数は空白区切りで出力されるため、どのビット列がどの文字に対応しているのかがひと目で分かるようになっています。
まとめ
このように、C++では文字をASCIIコード経由で整数に変換し、2での除算と剰余を繰り返すことで、簡単にバイナリ(2進数)列へ変換することができます。文字コードの仕組みやビット演算の理解を深めるためにも、ぜひ実際にコードを動かしてみてください。
-
C++でソート済み連結リストを高さ平衡な二分探索木に変換する方法
はじめに要素が非減少順(昇順)に並んでいる単方向連結リストが与えられたとき、それを高さ平衡な二分探索木(BST)へ変換する問題を考えてみましょう。例えば、リストが [-10, -3, 0, 5, 9] の場合、変換後の木は次のようになります。この問題では、リストの中央の要素を根(ルート)として選び、その左右の部分リストをそれぞれ再帰的に変換することで、自然にバランスの取れた木を構築できます。以下の手順で解いていきましょう。アルゴリズムの手順リストが空の場合は null を返します。リストの先頭ノードを受け取る再帰メソッド sortedListToBST() を定義します。高速ポインタ・低速ポイ
-
C++で二分探索木(BST)にノードを挿入する方法を解説
二分探索木(Binary Search Tree、BST)が与えられたとします。ここでは、挿入したいノードをパラメータとして受け取り、挿入操作を行うメソッドを1つだけ実装します。重要なポイントは、挿入操作を行った後も木がBSTの性質(左の子 < 親 < 右の子)を維持していることです。例えば、次のようなBSTがあるとします。この木に「5」を挿入すると、BSTの規則に従って適切な位置が探索され、木は次のようになります。解決のためのアプローチこの問題は、再帰を使うことでシンプルに解くことができます。手順は以下の通りです。insert() という再帰的なメソッドを実装します。引数として挿入する値 v