免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1992 | 回复: 4
打印 上一主题 下一主题

我想能随机产生一个30-50个字符的自符串? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-11 22:32 |只看该作者 |倒序浏览
这个函数该怎么写,主要是怎么随机取字符?

论坛徽章:
0
2 [报告]
发表于 2004-06-11 23:21 |只看该作者

我想能随机产生一个30-50个字符的自符串?

我的想法是
做一个字符表(一二维都应该可以),然后先控制产生一个随即数(保证该数30到50之间,random(20)+30这样差不多可以吧),控制循环次数,在循环中从字符表里随机(也用随即数,并保证不会越界)读取
也可以不要字符表,在循环中控制一个随机数,产生ascii码,并保证在你需要的字符范围内(由于大小写和数字ascii不连续,可能有点难度)
应该还会有好些的方法,再想想

论坛徽章:
0
3 [报告]
发表于 2004-06-12 09:55 |只看该作者

我想能随机产生一个30-50个字符的自符串?

写一个贴上来试试,肯定还有更好的算法:

  1. #include <stdio.h>;
  2. #include <stdlib.h>;

  3. void ran_str(int str_len)
  4. {
  5.         int i, r;
  6.         char *str = (char *)malloc(str_len + 1);
  7.        
  8.         srand(time(0));
  9.         for (i=0; i<str_len; i++) {
  10.        
  11.                 /* 产生一个0到51的随机数 */
  12.                 r = (int)(52.0 * rand() / (RAND_MAX + 1.0));
  13.                
  14.                 /* 如果这个随机数大于25,则用它生成大写字母,反之,则生成小写字母 */
  15.                 if (r >; 25)               
  16.                         *(str + i) = r / 2 + 'A';               
  17.                 else
  18.                         *(str + i) = r / 2 + 'a';               
  19.         }
  20.         *(str + i) = '\0';
  21.         printf("%s\n", str);
  22.         free(str);
  23. }

  24. int main()
  25. {
  26.         //产生一个长度为35的随机字符串
  27.         ran_str(35);
  28. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2004-06-13 00:16 |只看该作者

我想能随机产生一个30-50个字符的自符串?

读取/dev/urandom文件,截成7bit.

论坛徽章:
0
5 [报告]
发表于 2004-06-13 17:44 |只看该作者

我想能随机产生一个30-50个字符的自符串?

还要看你对随机性的要求.random()产生的是伪随机数.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP