编写ls命令,文件名字字典序排列问题

wingyip 2009-08-01 07:58:19
下面是一段自己写的 ls 命令代码 这段代码只能显示 文件的名字
我想让文件名以字典序排列 方法是用 #include<algorithm> 的 排序函数sort
为了方便使用sort排序 自定义了保存文件名的数据结构
typedef struct node
{
char data[50];
};

我的问题:
如果把//sort(store,store+i,cmp2); 注释掉可以正常输出文件名,如果经过排序后,会显示内存出错之类一大堆的看不懂的。

下面是完整的代码 ls1.cpp
#include<iostream>
#include<sys/types.h>
#include<dirent.h>
#include<algorithm>
#include<string.h>
using namespace std;
typedef struct node
{
char data[50];
}node;

bool cmp(node,node);
void do_ls(char []);

int main(int ac, char * av[])
{
if( ac == 1)
do_ls(".");
else
{
while( --ac )
{
printf("%s:\n", *++av);
do_ls(*av);
}
}
return 0;
}

bool cmp2(node a,node b)
{
return strcmp(a.data,b.data);
}

void do_ls(char dirname[])
{
DIR *dir_ptr;
int i=0,j,len;
struct dirent *direntp;
node store[100];
if( (dir_ptr = opendir( dirname )) == NULL )
fprintf(stderr,"ls1:cannot open %s\n",dirname);
else
{
while( (direntp = readdir( dir_ptr )) != NULL )
{
len=strlen(direntp->d_name);
strncpy(store[i].data,direntp->d_name,len);
store[i++].data[len]='\0';
}
sort(store,store+i,cmp2);
for(j=0;j<i;j++)
printf("%s\n",store[j].data);
closedir(dir_ptr);
}
}
...全文
300 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ShowMan 2009-08-02
  • 打赏
  • 举报
回复
你的sort的用法看起来是错误的。
给个例子看看。
sort()函数定义在头文件<algorithm>中,它把容器中的数据重新排序成非递减序列。我们之所以用非递减而不用递增是因为,容器中的某些数据元素可能会与其他元素相等。
double x;
vector<double> numbers;
typedef vector<double>::size_type vec_size;
vec_sz size = numbers.size();

while(cin >> x)
numbers.push_back(x);
sort(numbers.begin(), numbers.end());
//sort函数巧妙地完成了任务,它仅仅调换了原容器中元素值的相对顺序,而不是创建一个新的容器来存储排序后的结果。

//排序后求中数
vec_sz mid = size/2;
double median;
median = size % 2 == 0 ? (numbers[mid] + numbers[mid-1])/2 : numbers[mid];

//如果不希望改变向量本身,就可以通过函数参数的方式调用它
//调用函数时整个vector参数都会被复制
double median(vector<double> vec)
{
sort(vec.begin(), vec.end());
return
}

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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