求大神帮忙c++随机生成字符串的问题

鹏割 2014-04-30 03:32:52
楼主正在学习数据结果的串这一章,要生成一个随机的串,于是。。。



void MySqString::RandCreat()
{
srand((unsigned)time(NULL));
const int n=62; // 10+26+26
char SS[n]={'0','1','2','3','4','5','6','7','8','9','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'};
length=rand()%15;
int j=0;
for(int i=0;i<length;i++)
{

ch=new char[length];
assert(ch!=0);
j=rand()%n;
ch[i]=SS[j];
}

} //随机生成串 这个是随机生成的函数

void SqString::display(ostream& out) const
{
for(int i=0;i<length;++i)
{
out<<ch[i];
}

cout<<endl;
} //这个是输出
然后,然后结果生成的是这个 ,,,,


随机了好几次都是屯屯屯加一个字母,请问为什么啊,我是菜鸟。。什么都不知道



...全文
258 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
鹏割 2014-04-30
  • 打赏
  • 举报
回复
引用 3 楼 cs5512 的回复:
#include <iostream> #include <assert.h> #include <cstdlib> class SqString { private: char *ch; int length; public: void RandCreat(); void display() const; }; void SqString::RandCreat() { srand((unsigned)time(NULL)); const int n=62; // 10+26+26 char SS[n]={'0','1','2','3','4','5','6','7','8','9','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'}; length=rand()%15; int j=0; ch = new char[length]; assert(ch!=0); for(int i=0;i<length;i++) { j=rand()%n; ch[i]=SS[j]; } } //随机生成串 这个是随机生成的函数 void SqString::display() const { for(int i=0;i<length;++i) { std::cout<<ch[i]; } std::cout<<std::endl; } 按照你的样子修改了一下,但是这个程序还有很多地方有问题,比如ch没有delete
谢啦,已经弄好了
鹏割 2014-04-30
  • 打赏
  • 举报
回复
引用 1 楼 u014737671 的回复:
ch=new char[length]; 这段代码放到外边,因为不是每次都需要分配的
哈哈哈,谢了,就是这个,放出去就ok了,谢啦
赵4老师 2014-04-30
  • 打赏
  • 举报
回复
为什么要有数据结构这个东东? 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存(光盘、硬盘、U盘……)或内存(ROM、RAM、SRAM……)里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。
赵4老师 2014-04-30
  • 打赏
  • 举报
回复
仅供参考
//产生一个包含字母、数字、以及其他字符的字符串
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CN  8 //大写英文字母个数
#define LN  8 //小写英文字母个数
#define NN  8 //数字个数
#define SN  8 //符号个数
char t[CN+LN+NN+SN+1];
char S[33]="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
char *myrandstr() {
    int i,n,a,b;
    char tc;

    for (i=0;i<CN;i++) sprintf(t         +i,"%c",'A'+rand()%('Z'-'A'+1));
    for (i=0;i<LN;i++) sprintf(t+CN      +i,"%c",'a'+rand()%('z'-'a'+1));
    for (i=0;i<NN;i++) sprintf(t+CN+LN   +i,"%c",'0'+rand()%('9'-'0'+1));
    for (i=0;i<SN;i++) sprintf(t+CN+LN+NN+i,"%c",S[rand()%32]          );

    n=CN+LN+NN+SN-1;
    for (i=n;i>0;i--) {
        a=i-1;b=rand()%i;
        if (a!=b) {tc=t[a];t[a]=t[b];t[b]=tc;}
    }
    return t;
}
int main() {
    int i;

    srand(time(NULL));
    for (i=0;i<10;i++) printf("%s\n",myrandstr());
    return 0;
}
//iWQ*RG7r2)u'9lAJ9t2Vl03d)Ht"5-@/
//^dQPe_R>00Z6H6x3+klGS2=Ewqf/86^)
//u>2oR=55?aaj4OXG0:9rX#6+Dv6DDt-=
//5Ym?X9_'qDDoe#p5v2M[S8!p8He3I9)+
//81w{`951ScIy=92K@ZMJ[p%@qkdLb7Y}
//2oIRnxw6~:84MF;~C|]msWr1Q~9Jb88=
//1IV}4x,TpheG[3J4T}g"Pc"3uV]q022!
//mH12~+81Kipri5QYUUd|:Oo7B(\e50(`
//laHaY=IyIby!J5b?6}Vy25]8B"65%3E"
//2>W|33hQQ2vA5ws02J<TkS!1Rlik[[]!
//
  • 打赏
  • 举报
回复
#include <iostream> #include <assert.h> #include <cstdlib> class SqString { private: char *ch; int length; public: void RandCreat(); void display() const; }; void SqString::RandCreat() { srand((unsigned)time(NULL)); const int n=62; // 10+26+26 char SS[n]={'0','1','2','3','4','5','6','7','8','9','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'}; length=rand()%15; int j=0; ch = new char[length]; assert(ch!=0); for(int i=0;i<length;i++) { j=rand()%n; ch[i]=SS[j]; } } //随机生成串 这个是随机生成的函数 void SqString::display() const { for(int i=0;i<length;++i) { std::cout<<ch[i]; } std::cout<<std::endl; } 按照你的样子修改了一下,但是这个程序还有很多地方有问题,比如ch没有delete
  • 打赏
  • 举报
回复
1.for(int i=0;i<length;++i) { out<<ch[i]; } 这个改为 .for(int i=0;i<length;i++) { out<<ch[i]; }
显圣真君 2014-04-30
  • 打赏
  • 举报
回复
ch=new char[length]; 这段代码放到外边,因为不是每次都需要分配的

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧