求一简单的算法,谢谢

xiaochengfei 2010-10-12 12:22:26
对图象文件按文件名进行排序

(设备有拍照功能,拍的照片命名为PIC+时分秒.JPG,如PIC101010.JPG,同一天拍的照片在同一个文件夹内,不同日期新拍照片会自动创建文件夹装照片)

请给出代码,谢谢

我的思路是建立一个双链表,读文件名转化成字符串做比较,进行排序,新增照片排在末尾,删除照片后删除该节点。


我编码能力不好,请大俠帮忙,谢谢!

...全文
148 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
千杯不醉-sen 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 libinfei8848 的回复:]
你的想法可以的
使用脚本来写会更方面
[/Quote]
不懂,帮顶、、、
libinfei8848 2010-10-13
  • 打赏
  • 举报
回复
你的想法可以的
使用脚本来写会更方面
赵4老师 2010-10-12
  • 打赏
  • 举报
回复
system("cmd /c dir /a-d /b /on C:\\mydir\\PIC??????.JPG >c:\\picfiles.txt");
//然后读文件c:\\picfiles.txt的内容

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
flatfoosie 2010-10-12
  • 打赏
  • 举报
回复
思路不挺好的么?
fetionone 2010-10-12
  • 打赏
  • 举报
回复
#include <stdlib.h>

#include <windows.h>

#pragma warning(disable: 4786)
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

//搜索文件名
void ListAllFiles(char *pathName,vector<string> &af)
{
int len = strlen(pathName);
if(pathName==NULL || len<=0)
return;

WIN32_FIND_DATA FindFileData;
HANDLE FileHandle;
string strConv;
char stemp[512];
sprintf(stemp,"%s\\*.*",pathName);

FileHandle = FindFirstFile(stemp,&FindFileData);
if (FileHandle == INVALID_HANDLE_VALUE)
{
return;
}

BOOL bIsDirectory;
BOOL bFinish = FALSE;
char tempPath[MAX_PATH];
while(!bFinish && FileHandle != INVALID_HANDLE_VALUE)
{
bIsDirectory = ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0);

//. or .. do not handle
if ( bIsDirectory && ( strcmp(FindFileData.cFileName,".") == 0 || strcmp(FindFileData.cFileName,"..") == 0) )
{
bFinish = (FindNextFile(FileHandle, &FindFileData) == FALSE);
continue;
}

strConv = FindFileData.cFileName;

//if file, save it in the vector
if (!bIsDirectory)
{
af.push_back(strConv);

}
else //if common directory , recursively finding
{
memset(tempPath,0,MAX_PATH);
sprintf(tempPath,"%s\\%s",pathName,strConv.c_str());
ListAllFiles(tempPath,af);
}

bFinish = (FindNextFile(FileHandle,&FindFileData) == FALSE);

}//end while

FindClose(FileHandle);
}

//显示
int dispaly_all_filenames(vector<string> vs)
{
vector<string>::iterator it;

for (it = vs.begin(); it != vs.end(); it++)
{
cout<<*it <<endl;
}

return 0;

}

int main(int argc, char* argv[])
{
if (argc != 2)
{

printf("用法: PicnameSort \"路径名\" \n");
printf("比如: PicnameSort d:\\pic\n");
}
else
{
vector<string> vs_filenames;

ListAllFiles(argv[1],vs_filenames);
dispaly_all_filenames(vs_filenames);

printf("排序后:\n\n");

sort(vs_filenames.begin(),vs_filenames.end()); //排序
dispaly_all_filenames(vs_filenames);


}

return 0;
}
xiaochengfei 2010-10-12
  • 打赏
  • 举报
回复
我不是炼手呀
这是工作上的事情,设备跑的是RTOS(THREADX),底层封装好了,照片是存在SD卡上的

不会还要去看一下FAT手册吧,有那么难吗
乐CC 2010-10-12
  • 打赏
  • 举报
回复
不知道楼主想要什么结果,这样排序的结果放哪呢?放程序中?那有什么用处呢,如果想文件排序,那就用windows的好了,想输出到文件,按2楼的这位大哥给的批处理就挺好用的,都不用写代码了,直接将
dir /a-d /b /on C:\\mydir\\PIC??????.JPG >c:\\picfiles.txt这句保存成bat文件运行就行了,如果只是想练练手学排序,那完全不必要读文件名嘛,可以写个输入文件,里面写一大堆字符串不就行了。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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