练习5-15 增加选项-f,使得排序过程不考虑字母大小写之间的区别。例如比较a和A时认为它们相等
来源:互联网 发布:2016年宏观经济数据 编辑:程序博客网 时间:2024/05/21 20:23
在练习5-14中添加charcmp函数即可
#include <stdio.h>#include <string.h>#define MAXLINES 5000#define NUMERIC 1#define DECR 2#define FOLD 4char *lineptr[MAXLINES];int readlines(char *lineptr[],int nlines);void writelines(char *lineptr[],int nlines,int decr);void qsort2(void *lineptr[],int left,int right, int (*comp)(void *,void *));int numcmp(char *,char *);int charcmp(char *s,char *t);char option=0;main(int argc,char *argv[]){ int nlines; int c,rc=0; while(--argc>0 && (*++argv)[0]=='-') while(c=*++argv[0]){ switch(c){ case 'n': option|=NUMERIC; break; case 'r': option|=DECR; break; case 'f': option|=FOLD; break; default: printf("sort: illegal option %c\n",c); argc=1; break; } } if(argc) printf("Usage: sort -nr \n"); else if((nlines=readlines(lineptr,MAXLINES))>=0){ if(option & NUMERIC) qsort2((void **)lineptr,0,nlines-1, (int (*)(void *,void *))numcmp);/* (int (*)(void *,void *)) */ else if(option & FOLD) qsort2((void **)lineptr,0,nlines-1, (int (*)(void *,void *))charcmp); else qsort2((void **)lineptr,0,nlines-1, (int (*)(void *,void *))strcmp); writelines(lineptr,nlines,option & DECR); } else{ printf("input too big to sort\n"); rc=-1; } return rc;}#define MAXLEN 1000int getline(char *,int);char *alloc(int);int readlines(char *lineptr[],int maxlines){ int len,nlines; char *p,line[MAXLEN]; nlines=0; while((len=getline(line,MAXLEN))>0){ if(nlines>MAXLINES || (p=alloc(len))==NULL) return -1; else{ line[len-1]='\0'; strcpy(p,line); lineptr[nlines++]=p; } } return nlines;}int getline(char *s,int lim){ int c; char *t=s; while(--lim>0 &&(c=getchar())!=EOF && c!='\n') *s++=c; if(c=='\n') *s++=c; *s='\0'; return s-t;}#define ALLOCSIZE 10000static char allocbuf[ALLOCSIZE];static char *allocp=allocbuf;char *alloc(int n){ if(allocbuf+ALLOCSIZE-allocp>=n){ allocp+=n; return allocp-n; } else return 0;}void writelines(char *lineptr[],int nlines,int decr){ int i; if(decr) for(i=nlines-1;i>=0;i--) printf("%s\n",lineptr[i]); else for(i=0;i<nlines;i++) printf("%s\n",lineptr[i]);}void qsort2(void *v[],int left,int right, int (*comp)(void *,void *))//void *v[]{ int i,last; void swap(void *v[],int,int); if(left>=right) return; swap(v,left,(left+right)/2); last=left; for(i=left+1;i<=right;i++) if((*comp)(v[i],v[left])<0) swap(v,++last,i); swap(v,left,last); qsort2(v,left,last-1,comp); qsort2(v,last+1,right,comp);}#include <stdlib.h>int numcmp(char *s1,char *s2){ double v1,v2; v1=atof(s1); v2=atof(s2); if(v1<v2) return -1; else if(v1>v2) return 1; else return 0;}int charcmp(char *s,char *t){ for(;tolower(*s)==tolower(*t);s++,t++) if(*s=='\0') return 0; return tolower(*s)-tolower(*t);}void swap(void *v[],int i,int j){ void *temp; temp=v[i]; v[i]=v[j]; v[j]=temp;}
0 0
- 练习5-15 增加选项-f,使得排序过程不考虑字母大小写之间的区别。例如比较a和A时认为它们相等
- 含有大小写字母的字符串按照a-zA-Z排序
- 练习 5-16 增加选项-d(代表目录顺序)。该选项表明,只对字母、数字和空格进行比 较。要保证该选项可以和-f 组合在一起使用
- 数组:f[a,A,h,f,H,F]实现一个排序的效果:[A,a,F,f,H,h],先按字母顺序排列,再把每个字母的大写字母写在前面,小写放在后面。
- 不区分字母大小写排序
- 字母大小写转换:a=a^1<<5;
- 大小写字母的排序
- 数字版本比较(不考虑带字母的版本号)
- 练习5-17 增加字符段处理功能,以使得排序程序可以根据行内的不同字段进行排序,每个字段按照一个单独的选项集合进行排序
- 数组a[],a,&a之间的区别
- 黑马程序员 C#统计一行字符串中各个字母出现的频率(不考虑大小写,不考虑其他字符)
- 大小写字母之间的转换
- 大小写字母之间的转换
- 字母大小写之间的转化
- Sum All Numbers in a Range 返回两个数字和它们之间所有数字的和
- Lunix 的版本有很多, 它们之间的比较和区别
- 几种排序方式以及它们之间的比较
- 面试题题排序,字符串数组按照字母排序,不区分大小写比较
- 【YMGJ 4】APP-----长度不能小于 0
- Toasts
- Codeforces 570B Simple Game
- ubuntu中spark使用mysql 图文教程
- Oracle clob无法修改为blob
- 练习5-15 增加选项-f,使得排序过程不考虑字母大小写之间的区别。例如比较a和A时认为它们相等
- Elementary OS 下安装 ROS (Robot Operating System)
- ListView的HeaderView
- 天线设计(上)
- 21. Merge Two Sorted Lists
- java中AWT和SWing的区别与联系
- 通过HttpURLConnection获取网络图片实例
- 几个重要的库函数strpcy\strncpy\memcpy……
- Caffe 作者贾扬清:我为什么离开 Google,加入 Facebook?