读书人

随机产生字符串,该怎么解决

发布时间: 2012-02-21 16:26:23 作者: rapoo

随机产生字符串
最近做一个 trainning,一位大牛给的任务.请高手帮忙.
题目:产生随机的的字符串
要求:1.字符串中的每个字母是随机的.2.字符串的长度很大,考虑2个G的情况.3.字符串的产生速度要快,不能一个字符一个字符产生.

大牛给的提示: 长度很长,且随机的字符串在数据加秘算法中经常用到,可以利用字典的方法快速产生随机的很长的字符串,但是具体怎么做我就不知道了,我比较菜,希望各位大牛给个提示,或是相关资料.现在完全摸不到头脑.

[解决办法]
大牛就是大牛哈,高深。
俺的想法是这样啊,
假设你就一个一个地产生吧,就相当于每次在一个26元素的字典中随机取一个元素;
你要是想两个两个地产生呢,就得先把所有两个字母可能的序列都存在一个26*26=676个元素的字典里,每次随机取一个,就OK了。
仨仨地产生,就得弄一个17576个元素的字典;四个四个地产生,就得弄一个456976元素的字典;再多的就不废话了,只要内存允许,就可劲的造吧。
不成熟的想法,仅供参考哈。
[解决办法]
帮你顶下
[解决办法]

C/C++ code
include<stdio.h>   include<iostream>   include<time.h>   include<stdlib.h>   include<string>   using namespace std;       string RandString(int n) { //参数n为字符串的最大长度         int i,j,m;        string s;        char temp;        j = rand() % 2;        for(i = rand() % n; i < n; i++)     {            if(j == 0)              temp = 'a';            else                temp = 'A';            m = rand() % 26;            temp = temp + m;            s = s + temp;        }        return s;    }       int main()    {        int max,n;        cout<<"请输入产生的字符串的最大长度:";        cin>>max;        cout<<endl<<"请输入要产生的字符串的个数:";        cin>>n;         string  s;        srand((unsigned) time(NULL));        for(int i = 0; i < n; i++)     {             s = RandString(max);            cout<<"随机产生的字符串为:"<<s<<endl;        }        system("pause");        return 0;    }
[解决办法]
字典方法?是否这样:
1,hdrhdah
2,dfagdfhd
3,dfhhsj
4,dfgujhj
。。。。。。
N,sdahgfdf
for(int i=0;i<NUM;i++)
{
string+=rand()%N;
}
这样产生快了不?
[解决办法]
xuexi le
[解决办法]
rand()产生的不是伪随机数么?这样行么?
探讨
C/C++ code
include<stdio.h>
include<iostream>
include<time.h>
include<stdlib.h>
include<string>usingnamespace std;string RandString(int n)
{//参数n为字符串的最大长度int i,j,m;string s;char temp;
j= rand()%2;for(i= rand()% n; i< n; i++)
{if(j==0)
temp='a';else
temp='A';
m= rand()%26;
temp= temp+ m;
s= s+ temp;
}return s;
}int main()
{int max,n;
cout<<"请输入产生的字符串的最大长度:";
cin>>max;
cout<<endl<<"请输入要产生的字符串的个数:";
cin>>n;string s;
srand((unsigned) time(NULL));for(int i=0; i< n; i++)
{
s= RandString(max);
cout<<"随机产生的字符串为:"<<s<<endl;
}
system("pause");return0;
}
VC6.0下的,效率不是很好。

读书人网 >C++

热点推荐