void CreateASCII() //随机生成ascii码(小写字母)
{
int i;
int rand;
for (i = 0; i < 6000; i++)
ascii[i] = (rand() * rand() % (98 - 97 + 1)) + 97;
for (i = 6000; i < 8000; i++)
ascii[i] = (rand() * rand() % (105 - 97 + 1)) + 97;
for (i = 8000; i < 9000; i++)
ascii[i] = (rand() * rand() % (120 - 100 + 1)) + 100;
for (i = 9000; i < 9900; i++)
ascii[i] = (rand() * rand() % (120 - 97 + 1)) + 97;
for (i = 9900; i < 10000; i++)
ascii[i] = (rand() * rand() % (122 - 120 + 1)) + 120;
for (i = 0; i < 10000; i++)
for (int e = 0; e < 26; e++)
if (ascii[i] == 97 + e) num[e]++;//计算各字符频数
for (int c=0; c < 26; c++)
cout << (char)(97 + c) << "的频数为:" << num[c] << endl;//打印各频数
}
遇到这个报错该怎么解决啊[Error] 'rand' cannot be used as a function
加入头文件 stdlib.h,其他地方也稍微修改下,四个产生ascii码的for循环未修改。
修改如下:
参考链接:
#include <iostream>
#include <stdlib.h> // rand()函数头文件
using namespace std;
char ascii[20000];
int num[26];
void CreateASCII() //随机生成ascii码(小写字母)
{
int i;
//int rand; // 这个不要,因为会和下面的rand()函数产生冲突
for (i = 0; i < 6000; i++)
ascii[i] = (rand() * rand() % (98 - 97 + 1)) + 97;
for (i = 6000; i < 8000; i++)
ascii[i] = (rand() * rand() % (105 - 97 + 1)) + 97;
for (i = 8000; i < 9000; i++)
ascii[i] = (rand() * rand() % (120 - 100 + 1)) + 100;
for (i = 9000; i < 9900; i++)
ascii[i] = (rand() * rand() % (120 - 97 + 1)) + 97;
for (i = 9900; i < 10000; i++)
ascii[i] = (rand() * rand() % (122 - 120 + 1)) + 120;
for (i = 0; i < 10000; i++)
for (int e = 0; e < 26; e++)
if (ascii[i] == 97 + e) num[e]++;//计算各字符频数
for (int c=0; c < 26; c++)
cout << (char)(97 + c) << "的频数为:" << num[c] << endl;//打印各频数
}
int main(void){
CreateASCII();
return 0;
}
int rand;
你这里不是把它定义成int了吗,删掉
此外,使用rand之前,需要先使用随机种子,否则每次运行出来的数都是同一组数
rand(产生随机数)
表头文件: #include<stdlib.h>
定义函数 :int rand(void)
函数说明 :
因为rand() 的内部实现是用线性同余法做的,它不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand() 会返回一随机数值,范围在 0 至 RAND_MAX 间。
在调用此函数产生随机数前,必须先利用 srand()设置好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为 1。
rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它,初始化的函数就是 srand()。
使用srand函数要包含time.h头文件,然后使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列,同时这要求程序的两次运行的间隔超过1秒。
返回值:
返回 0 至 RAND_MAX 之间的随机整数值,RAND_MAX 的范围最少是在 32767 之间(int),即双字节(16位数)。
若用unsigned int 双字节是 65535,四字节是 4294967295 的整数范围。
0~RAND_MAX 每个数字被选中的机率是相同的。