发表这篇文章的目的有两个
1. 生成随机浮点数
2. c++ char * 如何传递和赋值
下面是源码:
main.cpp
int _tmain(int argc, _TCHAR* argv[])
{
GenerationRandomNumber generationAngle;
int number = 120;
char *g_char = (char *)malloc(sizeof(char)*1000);
if (number > 0)
{
generationAngle.GenerationRandomAngle(&g_char,number);
}
std::cout <<"g_char : " << g_char<<std::endl;
return 0;
}
GenerationRandomNumber.cpp
void GenerationRandomNumber::GenerationRandomAngle(char **g_chars,int number)
{
std::vector <float> randAngle; // 保存生成的随机角度,保留一位有效数字
int * marking = new int[3600](); // 标记那些角度已被使用
srand(unsigned(time(NULL))); // 随机种子初始化
for (int i = 0; i < number; i++)
{
float angle = (float)(rand()%3600)/10.0f; // 生成随机数
//bool flag = this->JudgmentRandAngle(marking,angle,randAngle); // 判断这个角度是否与周围相邻
//if (flag) // 相邻,此次计算作废
//{
// i--;
//}
}
std::sort(randAngle.begin(),randAngle.end());
for (int i = 0; i < randAngle.size(); i++)
{
std:: cout <<i<<" - "<< randAngle[i] << std:: endl;
}
// 拼接字符串
std::vector <float> ::iterator iter;
std::string g_str;
for (iter =randAngle.begin(); iter != randAngle.end() - 1;iter++)
{
std::stringstream ss;
ss<< *iter;
g_str += ss.str() + ",";
}
std::stringstream ss;
ss<< randAngle.back();
g_str += ss.str();
//std::cout << g_str<<std::endl;
strcpy(*g_chars,(char*)g_str.c_str()); // 转为 char*,
delete[] marking;
return ;
}
生成随机浮点数:
float angle = (float)(rand()%3600)/10.0f; // 生成随机数
其中: 3600 是范围 (0-360) , / 10.0f 是为了生成一位小数
char * 的赋值用到 strcpy , 参数传递时候需要传递地址,实参中用二级指针
strcpy(*g_chars,(char*)g_str.c_str()); // 转为 char*,