博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C++】随机重命名MP3文件
阅读量:4566 次
发布时间:2019-06-08

本文共 1739 字,大约阅读时间需要 5 分钟。

新置MP3一件,竟然没有随机播放的功能。坑啊!身为程序媛一枚,自己动手吧~

获取当前路径:

char buf[1000];	GetCurrentDirectory(1000,buf); 	string cur_folder_file = string(buf)+"\\*.mp3";
获取当前路径mp3文件列表:

void getMp3Names(string filepath,vector
&names){ names.clear(); WIN32_FIND_DATA f; HANDLE h = FindFirstFile(filepath.c_str() , &f); if(h != INVALID_HANDLE_VALUE) { do { names.push_back(f.cFileName); } while(FindNextFile(h, &f)); } FindClose(h); }
随机重命名mp3文件(命名为num.mp3,如5.mp3):

void renameMp3Names(vector
&names){ int mp3_num = names.size(); vector
used_names(mp3_num,false); srand(time(NULL)); for(int i=0;i

基本能够啦~

只是有一点。这个程序执行第二遍就有问题了,由于全部的文件都变成了 num.mp3,再次随机重命名的时候就会出现冲突,重名文件存在导致rename()失败!

再小小改动一下:

void renameMp3Names(vector
&names){ cout<<"---------------RENAME MP3 FILES---------------"<
used_names(mp3_num,false); srand(time(NULL)); for(int i=0;i

大功告成啦。

*有关生成随机序列的改动

多谢一楼友邻 的留言。指出来上述方法生成随机序列的效率非常低。确实。上面用的方法是初始化一个序列用来记录已经“用过”的数,如果生成的随机数是已经用过的数。那么就再又一次生成一遍。

这样的方法对于生成大小为N的随机序列,生成第一个随机数的期望次数为1次,第二次为N/(N-1)次,第三次为N/(N-2)次,最后一个数期望次数为N次效率确实非常低。

 给出的方法非常好:

能够这样理解这样的方法:生成随机序列相当于把之前0~N-1排序的N个数随机排列。那么每次我们随机抽出一个来排到后面。也就是第一次在全部N个数里随机抽一个排到最后一位。第二次在前N-1个数里随机抽一个排到倒数第二位,依次类推。

由于每次排序每一个数被抽到的概率都是1/N。所以能够觉得终于的序列是随机排的。

只是这样的方法在实现起来须要做几次不必要的位移。比方上面的样例中,第二次如果抽到了2,由0,1,2,3,5,4变成0,1,3,5,2,4须要把3移到第2位,5移到第三位,2换到第四位。这里3和5的移位事实上是不必要的。也就是我们下一次在4个数里随机取,前4个数排列成0,1,3,5还是0,1,5,3是不影响的。

所以仅仅须要把2和5换位置就可以。

总结生成随机序列的方法:循环N次。第i(i=0~N-1)次的操作为在前N-i个数中随机选一个数与第N-i-1个数交换位置。

void generateRandomList(vector
& rand_list){ int rand_size = rand_list.size(); for(int i=0;i
这次仅仅须要随机N次就能够生成不反复的随机序列啦~

(转载请注明作者和出处: 未经同意请勿用于商业用途)

转载于:https://www.cnblogs.com/mqxnongmin/p/10579127.html

你可能感兴趣的文章
bzoj2595 [Wc2008]游览计划
查看>>
noip2009 潜伏者
查看>>
HDU3986 SPFA
查看>>
Vue.js 响应式原理
查看>>
pwa
查看>>
GPU卡掉卡
查看>>
Javascript中的异步
查看>>
redis.config 配置文件,附上我知道的理解
查看>>
FISCO-BCOS平台共识
查看>>
Android OpenGL ES(三)----编程框架
查看>>
python基础-字符串操作
查看>>
Codevs No.1163 访问艺术馆
查看>>
缓存穿透,缓存击穿,缓存雪崩解决方案分析
查看>>
docker入门学习(二)mysql安装
查看>>
吴裕雄--天生自然 JAVASCRIPT开发学习:函数调用
查看>>
吴裕雄 PYTHON 神经网络——TENSORFLOW 无监督学习处理MNIST手写数字数据集
查看>>
吴裕雄--天生自然 JAVASCRIPT开发学习:函数
查看>>
JAVA内存模型后续问题
查看>>
用Redis实现微博关注关系的分析
查看>>
Python实现Newton和lagrange插值
查看>>