char* data[61]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"0","1","2","3","4","5","6","7","8","9"};
配列dataに入ってる文字を1~12文字ランダムで取得し
事前に用意しているtest.txtというファイルにその文字列を格納する。
ただし、作成された文字列がtest.txtのなかに存在するものならば格納はせず
もう一度文字列を作成しなおす。
確立的にはかなり低いですが
ランダムで作成された文字列が
abcdeでtest.txtの中に同じ
abcdeという文字列があれば
作成した文字列はファイルに書き込まず
もう一度ランダムで文字列を作り直す。
さらにtest.txtの中の文字列が1000個になったときは
test2.txtを作成してその中に次の文字列を格納する。
そのとき上記と同じ条件でtest.txt又はtest2.txtの中に
同じ文字列があるときは格納しない。
test2.txtが1000個になったときはtest3.txtを作成して格納する
test3.txtが1000個になったときはtest4.txtを作成して格納する
この繰り返しです。
トリップを作成するときに使うキーにしたいデータを作成したいのですが、
うまくいきません・・・・
トリップはCではなくWeb上のPHPでやるので作れるのですが、Cに関してはまったく初心者で・・・
どなたか変わりに作っていただける方がいましたらお願いします。
私のコンパイル環境は
VC++2008
です。
よろしくお願いします。
文字列データの作成依頼
Re:文字列データの作成依頼
規約と注意事項を読んでいただくと分かるのですが、
>課題の丸投げ(問題文だけ書く事)は禁止です。
となっています。
それにPHPのコードが書けるなら、コマンドライン上でPHPで実行しても作れると思うのであえてCを使う必要はないんじゃ無いでしょうか?
>課題の丸投げ(問題文だけ書く事)は禁止です。
となっています。
それにPHPのコードが書けるなら、コマンドライン上でPHPで実行しても作れると思うのであえてCを使う必要はないんじゃ無いでしょうか?
Re:文字列データの作成依頼
> Webで作成すると長い時間処理できないんです・・・
> サーバーが落ちてしまいますので・・・
softyaさんの回答は、Webサーバ上でPHPスクリプトを動かすことを
想定されていません。
ご自分のPC上にPHPをインストールしてある状態にして、
Webサーバで動かすためのスクリプトをご自分のPC上で
動かしてみてはいかがですか?とおっしゃっています。
> サーバーが落ちてしまいますので・・・
softyaさんの回答は、Webサーバ上でPHPスクリプトを動かすことを
想定されていません。
ご自分のPC上にPHPをインストールしてある状態にして、
Webサーバで動かすためのスクリプトをご自分のPC上で
動かしてみてはいかがですか?とおっしゃっています。
Re:文字列データの作成依頼
意外なことに、PHPプログラマであってもコマンドラインでPHPが使えることを知らない人が多いんですよね。
普通に、
php hoge.php
のようにして呼び出せばよいだけなんですが、コマンドラインツールの使い方がそもそも分からないのかもしれません。
あるいは、環境変数の設定の仕方がわからないとか...
普通に、
php hoge.php
のようにして呼び出せばよいだけなんですが、コマンドラインツールの使い方がそもそも分からないのかもしれません。
あるいは、環境変数の設定の仕方がわからないとか...
Re:文字列データの作成依頼
手順は違いますが動くだけなら作ってみました
#pragma warning( disable: 4786 ) #include <windows.h> // for GetTickCount #include <algorithm> #include <iostream> #include <string> #include <vector> using namespace std; static vector<string> gvStr; #define DEF_CREATE_TRIP_NUM 250000 // 作成するトリップの数 #define DEF_CREATE_TRIP_SIZE 12 // 作成するトリップの文字列の長さ void Now() { static vector<char> data; int i; for( i=0; i<26; i++ ) { printf( "%c", 'A'+i ); data.push_back( 'A'+i ); } for( i=0; i<26; i++ ) { printf( "%c", 'a'+i ); data.push_back( 'a'+i ); } for( i=0; i<10; i++ ) { printf( "%c", '0'+i ); data.push_back( '0'+i ); } printf( "\n" ); for( i=0; i<data.size(); i++ ) printf( "%c", data.at(i) ); // 何個作成するか? int num = DEF_CREATE_TRIP_NUM; printf( "\n%d個作成する\n", num ); int loop; for( loop=0; loop<num; loop++ ) { // 作成される文字列 char str[DEF_CREATE_TRIP_SIZE+2]; // ひとつ作成 // 作成する文字列の長さ int len = rand()%DEF_CREATE_TRIP_SIZE+1; memset( str, 0, sizeof(str) ); for( i=0; i<len; i++ ) { int r = rand()%data.size(); str = data.at(r); } gvStr.push_back( str ); // printf( "%s\n", str ); } // 重複要素を削除する vector<string>::iterator p; sort( gvStr.begin(), gvStr.end() ); p = unique( gvStr.begin(), gvStr.end() ); gvStr.erase( p, gvStr.end() ); printf( "実際に作成されたトリップの数:%d\n", gvStr.size() ); // ファイルに出力する int o_f_num; // 出力するファイルの数 o_f_num = gvStr.size()/1000; int o; for( o=0; o<=o_f_num; o++ ) { char out_filename[80]; sprintf( out_filename, "test%02d.txt", o ); FILE *file = fopen( out_filename, "wt" ); for( i=o*1000; i<(o+1)*1000; i++ ) { if( i>=gvStr.size() ) break; char out_str[DEF_CREATE_TRIP_SIZE+2]; memset( out_str, 0, sizeof(out_str) ); strcpy( out_str, gvStr.at(i).c_str() ); strcat( out_str, "\n" ); // 見やすいようにする fputs( out_str, file ); } fclose( file ); } } int main() { remove( "*.txt" ); srand(GetTickCount()); Now(); return 0; }