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

C++を使ってランダムな英数字文字列を生成する方法

この記事では、C++を使ってランダムな英数字文字列を生成する方法を解説します。対象となる文字は、小文字(a〜z)、大文字(A〜Z)、そして数字(0〜9)です。プログラムはこれらの文字の中からランダムに1文字ずつ選び、指定された長さのランダムな文字列を作成します。

入力:生成する文字列の長さを指定
出力:指定した長さのランダム文字列 例:「XSme6VAsvJ」

アルゴリズム

ステップ1:大文字・小文字・数字をすべて格納する配列を定義する
ステップ2:ユーザーから文字列の長さ n を受け取る
ステップ3:n 回ランダムに文字を選択し、長さ n の文字列を生成する
ステップ4:終了

サンプルコード

以下のコードでは、srand(time(0)) によって現在時刻をシード値として乱数を初期化しています。これにより、実行するたびに異なる乱数列が得られます。genRandom() 関数は、文字リストのインデックスを rand() % len でランダムに決定し、対応する1文字を返します。

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;

static const char alphanum[] = "0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";

int len = sizeof(alphanum) - 1;

char genRandom() { // ランダム文字列を生成する関数
return alphanum[rand() % len];
}

int main() {
srand(time(0)); // 現在時刻で乱数のシードを初期化
int n;
cout << "Enter string length: ";
cin >> n;
for(int z = 0; z < n; z++) { // 長さ n の文字列を生成
cout << genRandom(); // 文字リストからランダムな1文字を取得して出力
}
return 0;
}

実行結果

Enter string length: 10
XSme6VAsvJ

補足ポイント

  • シード値について: srand() を呼び出さない、または常に同じ固定値を渡すと、毎回同じ文字列が生成されてしまいます。実行ごとに違う結果が必要な場合は time(0) を使うのが一般的です。
  • より安全な乱数が必要な場合: パスワード生成などセキュリティが重要な用途では、rand() ではなく C++11 の <random> ヘッダ(std::mt19937std::uniform_int_distribution)や、OS提供の暗号学的乱数生成器(Linuxの /dev/urandom など)の利用を推奨します。
  1. C++で2つの0に挟まれた要素を削除する方法をわかりやすく解説

    この記事では、「0」と「1」のみで構成される文字列が与えられたとき、2つの「0」に挟まれた「1」をすべて削除する方法を解説します。最終的な文字列には、「0」に囲まれた「1」が一切残らない状態を目指します。問題の例入力 : string = 110010 出力 : 11000 説明 : インデックス4にある「1」が、前後の2つの「0」に挟まれているため削除されます。 入力 : string = 0010 出力 : 000 説明 : インデックス2にある「1」が、2つの「0」に挟まれているため削除されます。解決のためのアプローチここではシンプルなアプローチを採用します。ループを使って文字列を先頭

  2. C++とOpenCVでバイナリ画像(二値画像)を作成する方法を解説

    バイナリ画像(二値画像)とは、黒と白の2色のみで表現されるデジタル画像のことです。画像処理の観点から見ると、バイナリ画像は「0」と「1」という2つの値しか持たないピクセルで構成されています。ピクセルの値が0の場合は純粋な黒を、値が1の場合は純粋な白を表します。グレースケール画像では、各ピクセルが256段階の異なる値を持つのに対し、バイナリ画像では2つの値しか存在しません。このシンプルさゆえに、バイナリ画像はさまざまな用途で活用されています。例えば、モルフォロジー変換(形態学的処理)ではバイナリ画像が必要であり、背景から物体の形状を抽出する処理にもバイナリ画像が用いられます。OpenCVを使用す