私はC++が初めてです。これはおそらく乱雑に見えるので、2日間だけプログラミングされている。プログラムの目的は単語を入力することであり、プログラムはその単語の文字の配置をランダム化します。このランダマイザで何が問題なのか分かりません。
私には3つの質問があります。
- 同じ文字列を2回入力すると、同じ「ランダム」番号が出力されますか?
- 乱数が2回選択されていないことを確認する方法を教えてください。 FOR文の中に入れ子にされたIF文をすでに試しましたが、問題が悪化しました。
- この作業はどのように行われますか?
コード:
#include <iostream>
#include <sstream>
#include <string>
#include <cstdlib>
#include <stdio.h>
#include <string.h>
using namespace std;
int main() {
cout << "Enter word to be randomized: ";
char rstring[30];
char rstring2[30];
cin >> rstring;
strcpy(rstring2, rstring);
int length;
length = strlen(rstring);
int max=length;
int min=0;
int randint;
for (int rdm=0; rdm<length; rdm++) {
randint=rand()%(max-min)+min;
cout << rstring[rdm]; //This is temporary. Just a visualization of what I'm doing.
cout << randint << endl; //Temporary as well.
rstring2[randint]=rstring[rdm];
}
cout << endl << rstring2 << endl;
return 0;
}
あなたがこれをコンパイルして実行する場合は、同じ乱数が同じテキストのために出力されることがわかります。 "hello"の出力24330と同じです。なぜこのランダムジェネレータが非ランダムな数値を生成していますか?
あなたが "2" に手の込んだてもらえますか?すべての数字を最大で1回だけ表示しますか? – bitmask
*ランダム置換をしたい場合*あなたのアルゴリズムは以前にピックアップされたものを "覚え"なければなりません。 –
@BasileStarynkevitch:ランダムな選択の代わりに、私の答えが示唆するように、またはシャッフル。 –