- 1、本文档共180页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* void strcpy(char s[ ], char t[ ]) { int i = 0; while((s[i] = t[i++]) != ‘\0’) ; } * * * * * * * * * * * * * * * * 在讲用法之前考虑: 1、分配大大小? 2、分配空间位置位置或地址? 3、空间组织形式? * * * * * 函数类型为指针时的注意事项! * * * 指针变量保存内容?使用指针变量之前必须?如何为指针变量赋初值?如何取得指针指向的数据?指针作为函数参数传递?动态内存分配?释放指针注意? * 用处:指针也可以访问数组 * * * * * * * * * * * * * * * * * * 问题5.7:算法设计(续) 方法二:使用一个n个元素的指针数组。 依次读入每一行,然后循环挂到指针数组上。 char *lineptr[N]; /*存入所读入的行*/ char *line; /*当前读入行*/ int i; /*读入的行数*/ lineptr[i % n] = (char *)malloc(strlen(line)+1); strcpy(lineptr[i%n], line); … 问题5.7:算法设计(续) 方法三:两次扫描文件。 第一遍扫描文件,用于统计文件的总行数N; 第二遍扫描文件时,首先跳过前面N-n行,只读取最后n行。 如何开始第二遍扫描? fseek(fp, 0, SEEK_SET); 请同学们考虑是否还有其它方法?甚至更好的方法? 问题5.7:代码实现(循环链表) #include stdio.h #include stdlib.h #include string.h #define DEFLINES 10 #define MAXLEN 81 struct Tail { char *line; struct Tail *next; }; int main(int argc, char *argv[ ]) { char curline[MAXLEN],*filename; int n = DEFLINES, i; struct Tail *first, *ptr; FILE *fp; if( argc == 3 argv[1][0] == -) { n = atoi(argv[1]+1); filename = argv[2]; } else if( argc == 2) filename = argv[1]; else { fprintf(stderr, Usage: tail [-n] filename\n); return (1); } 命令行输入中指定打印行数时,获取行数及文件名。如tail -20 test.txt 命令行输入中没有指定打印行数时,获取文件名,此时行数为缺省10。 如tail test.txt 问题5.7:代码实现 if((fp = fopen(filename, r)) == NULL){ fprintf(stderr, Cannt open file: %s !\n, filename); return (-1); } first = ptr = (struct Tail *)malloc(sizeof ( struct Tail)); first-line = NULL; for(i=1; in; i++){ ptr-next = (struct Tail *)malloc(sizeof ( struct Tail)); ptr = ptr-next; ptr-line = NULL; } ptr-next = first; ptr = first; 创建循环链表 将链表的最后一个节点指向头节点,以构成一个循环链表。 问题5.7:代码实现 while(fgets(curline, MAXLEN, fp) != NULL){ if(ptr-line != NULL) free(ptr-line); ptr-line = (char *) malloc ( strlen(curline)+1); strcpy(ptr-line, curline); ptr = ptr-next; } for(i=0; in; i++) { if(ptr-line != NULL) printf(%s,
您可能关注的文档
- Android手机无纸化购彩虚拟客户端.ppt
- arcgis常用技巧.ppt
- Arcgis教程8.DEM制作和表面分析.ppt
- arcgis专题报告.doc
- autoCAD2004教程 打印输出.ppt
- Autocad2004试验指导书.doc
- AutoCAD基础与实例教程.ppt
- BL-A8S机型培训资料.ppt
- cad2004基础教程简单版.ppt
- CAD2004基础学习教程.ppt
- 2025特种作业煤矿安全作业考试综合练习带答案详解(夺分金卷).docx
- 2025特种作业煤矿安全作业考前冲刺练习含答案详解【培优B卷】.docx
- 2025年特种作业煤矿安全作业试题预测试卷带答案详解(基础题).docx
- 2025特种作业煤矿安全作业全真模拟模拟题及答案详解(名校卷).docx
- 2025特种作业煤矿安全作业测试卷带答案详解(典型题).docx
- 2025年特种作业煤矿安全作业综合提升测试卷及答案详解一套.docx
- 2025特种作业煤矿安全作业模考模拟试题附答案详解(实用).docx
- 2025年特种作业煤矿安全作业预测复习及答案详解(全优).docx
- 特种作业煤矿安全作业预测复习附参考答案详解【培优】.docx
- 2025年特种作业煤矿安全作业通关考试题库及答案详解【典优】.docx
文档评论(0)