C++で文字列を文字の正方行列グリッドに変換する方法
このチュートリアルでは、文字列を文字の正方行列グリッドに変換するプログラムの作成方法について解説します。
具体的には、文字の並びからなる文字列が与えられ、その文字列を指定した行数と列数を持つ行列グリッドの形式で出力することが課題となります。
アルゴリズムの考え方
文字列の長さを l とすると、グリッドの行数と列数は次のように決定できます。
- 行数 = floor(√l)(平方根の切り捨て)
- 列数 = ceil(√l)(平方根の切り上げ)
行数と列数の積が文字列の長さに満たない場合は、行数を列数と同じ値に設定し、すべての文字がグリッドに収まるように調整します。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
// 文字列をグリッド形式に変換する関数
void convert_grid(string str){
int l = str.length();
int k = 0, row, column;
row = floor(sqrt(l));
column = ceil(sqrt(l));
if (row * column < l)
row = column;
char s[row][column];
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
s[i][j] = str[k];
k++;
}
}
// 新しいグリッドを出力する
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
if (s[i][j] == '\0')
break;
cout << s[i][j];
}
cout << endl;
}
}
int main(){
string str = "TUTORIALSPOINT";
convert_grid(str);
return 0;
}出力結果
TUTO RIAL SPOI NT
コードの解説
まず、文字列の長さから行数と列数を計算します。次に、2次元配列に対して文字列の文字を1文字ずつ順番に格納していきます。最後に、グリッドの内容を行ごとに出力します。
文字列の長さが行数と列数の積で割り切れない場合、余ったセルにはヌル文字(\0)が格納されるため、出力時にはそのチェックを行い、文字が存在する部分だけを表示して改行しています。
この例では、14文字の文字列「TUTORIALSPOINT」が4行4列のグリッドに変換され、最後の行には残りの文字「NT」のみが出力されます。
-
C#で文字のリスト(char配列)を文字列に変換する方法
C#では、char型の配列(文字のリスト)を簡単に文字列へ変換できます。ポイントは、stringクラスが持つコンストラクタです。このコンストラクタは文字配列を引数として受け取り、その内容をもとに新しい文字列を生成します。1. 文字配列を宣言して値を設定するまず、文字配列を宣言し、各要素に文字を設定します。ここでは「Hello」という5文字を格納する例を紹介します。char[] ch = new char[5]; ch[0] = H; ch[1] = e; ch[2] = l; ch[3] = l; ch[4] = o;2. stringコンストラクタで文字列に変換する次に、stringクラス
-
Pythonで文字のリストを文字列に変換する方法を解説
Pythonでは、リスト内の個々の要素をひとつの文字列にまとめたい場面がよくあります。たとえば、データを保存したり送信したりする際に必要となるシリアライズ(直列化)の処理では、このような変換が非常に役立ちます。具体的には、次のような変換を指します。[h, e, l, l, o, , w, o, r, l, d] → hello worldjoinメソッドを使った変換Pythonには、このような変換を実現するためのjoin()メソッドが標準で用意されています。joinメソッドは、区切り文字(デリミタ)として使う文字列に対して呼び出し、引数に渡したリストの各要素を連結します。今回は各文字をつなげ