• 締切済み

ランダムな英文字の文字列作成

これをcで書こうとしています。 文字列の文字数は10文字程度、 作る数は1000個程度にしたいと思います。 http://www5.airnet.ne.jp/tomy/cpro/ra3.htm を参考にして見たのですが、行き詰ってしまいました・・・。 分かる方がいらっしゃいましたら、教えてください。

みんなの回答

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

文字列が重複してはまずいのでしょうから、それをよけてやる必要があると思います。ndbmを使って↓の様なのはどうでしょうか? #include <stdlib.h> #include <stdio.h> #include <time.h> #include <gdbm.h> #include <errno.h> #include <sys/types.h> #include <unistd.h> char *prog; void usage(void) { fprintf(stderr, "%s nletter nword\n", prog); exit(0); } int main(int argc, char *argv[]) { int i, j, k; int nletter, nword; char word[11]; char dbname[80]; GDBM_FILE dbf; datum content, key; prog = argv[0]; if (argc < 2) { usage(); } nletter = atoi(argv[1]); nword = atoi(argv[2]); sprintf(dbname, "/tmp/randword%d", (int) getppid()); if ((dbf = gdbm_open(dbname, 0, GDBM_NEWDB, 0644, NULL)) == NULL) { fprintf(stderr, "Can(t open dbm %s\n", dbname); exit(errno); } srand((unsigned) time(NULL)); for (k = j = 0; j < nword;) { for (i = 0; i < nletter; i++) { word[i] = 'a' + (rand() % 26); } word[i] = '\0'; key.dptr = word; key.dsize = nletter + 1; content = gdbm_fetch(dbf, key); if (content.dptr == NULL) { content.dptr = " "; content.dsize = 1; gdbm_store(dbf, key, content, GDBM_INSERT); j++; printf("%s\n", word); } else fprintf(stderr, "double=%d\n", ++k); } fprintf(stderr, "double=%d\n", k); unlink(dbname); return 0; }

bkyou
質問者

お礼

ありがとうございました。 プログラム内で分からない部分がありましたが、 勉強になりました。

すると、全ての回答が全文表示されます。
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

そのURLはランダム数値生成のアルゴリズムをソースで 解説しているページです。 ランダム数を得る関数はCの標準関数で用意されています。 単純にaからzまでのアルファベットをランダムにだしたいなら char test = 'a' + (rand() % 26 ); でtestにa~zが入ります。 で10文字作りたいならこんな感じです。 #include <stdlib.h> #include <stdio.h> #include <time.h> int main(){ int i; char Test[11]; srand( (unsigned)time( NULL ) ); for( i = 0 ; i < 10 ; i++ ){ Test[i] = 'a' + (rand() % 26 ); } Test[i] = '\0'; printf(Test); return 0; }

bkyou
質問者

お礼

大変分かりやすいプログラムありがとうございました。 プログラムを少しいじらせてもらい、完成させることが出来ました。

すると、全ての回答が全文表示されます。

関連するQ&A