当前位置: 技术问答>linux和unix
编写ls命令,文件名字字典序排列问题
来源: 互联网 发布时间:2016-06-21
本文导语: 下面是一段自己写的 ls 命令代码 这段代码只能显示 文件的名字 我想让文件名以字典序排列 方法是用 #include 的 排序函数sort 为了方便使用sort排序 自定义了保存文件名的数据结构 typedef struct node { ...
下面是一段自己写的 ls 命令代码 这段代码只能显示 文件的名字
我想让文件名以字典序排列 方法是用 #include 的 排序函数sort
为了方便使用sort排序 自定义了保存文件名的数据结构
typedef struct node
{
char data[50];
};
我的问题:
如果把//sort(store,store+i,cmp2); 注释掉可以正常输出文件名,如果经过排序后,会显示内存出错之类一大堆的看不懂的。
下面是完整的代码 ls1.cpp
#include
#include
#include
#include
#include
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 %sn",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]='';
}
sort(store,store+i,cmp2);
for(j=0;j> 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 vec)
{
sort(vec.begin(), vec.end());
return
}
我想让文件名以字典序排列 方法是用 #include 的 排序函数sort
为了方便使用sort排序 自定义了保存文件名的数据结构
typedef struct node
{
char data[50];
};
我的问题:
如果把//sort(store,store+i,cmp2); 注释掉可以正常输出文件名,如果经过排序后,会显示内存出错之类一大堆的看不懂的。
下面是完整的代码 ls1.cpp
#include
#include
#include
#include
#include
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 %sn",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]='';
}
sort(store,store+i,cmp2);
for(j=0;j> 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 vec)
{
sort(vec.begin(), vec.end());
return
}
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。