源自《The C Programming Language》P20 ex1.9:

从终端读入一组文本行,并将最长的文本行打印出来

代码:

 

main.c

1 #include <stdio.h>
2
3 #define MAXLINE 1000 //允许输入行的最大长度
4 #define LIM 8
5
6 int getline(char line[], int maxline);
7 void copy(char to[], char from[]);
8
9 int main()
10 {
11
12 int i, j;
13 int len; //当前行长度
14 int maxnum; //目前为止发现的最长行的长度
15 char line[MAXLINE]; //当前输入行
16 char longest[MAXLINE][MAXLINE]; //用于保存最长的行
17
18 i = j = 0;
19 maxnum = 0;
20 /*while((len = getline(line, MAXLINE)) > 0)
21 if(maxnum < len)
22 {
23 maxnum = len;
24 copy(longest, line);
25 }
26 if(maxnum > 0)
27 printf("%s",longest);*/
28 while((len = getline(line, MAXLINE)) > 0)
29 if(len > LIM)
30 copy(longest[i++], line);
31 --i;
32 while(j <= i)
33 printf("%s", longest[j++]);
34
35 return 0;
36 }
37
38 int getline(char s[], int lim)
39 {
40 int c, i;
41
42 for(i = 0; i<lim-1 && (c = getchar())!=EOF && c!='\n'; ++i)
43 s[i] = c;
44 if(c == '\n')
45 {
46 s[i] = c;
47 ++i;
48 }
49 s[i] = '\0';
50
51 return i;
52 }
53
54 void copy(char to[], char from[])
55 {
56 int i;
57
58 i = 0;
59 while((to[i] = from[i]) != '\0')
60 ++i;
61 }

分析:

1,  需要两个数据结构:line,longest保存当前输入行,长度最长的行,line longest均为指向大小为MAXLINE的char数组。

2,  getline函数:将一行读入到line中,返回其长度。

(a):for循环的判断条件,i < lim-1 && (c = getchar()) != EOF && c != '/n',当满足这些条件时,将从终端中的读入

字符放进s数组(即实参line数组)中。

(b):Q:为什么不是i <= lim-1呢? A:字符串的结尾符必须是'/0',如果设置为i <= lim-1,在本例中则为i <= 999,

如果一个字符串刚好是1000个字符,当读入第1000个字符时,并且该字符不是'/n',也没到达文件尾,则符合for

循环的判断条件,执行s[i] = c;,此时字符数组s(相对应实参line)放满了,当跳出循环执行s[i] = '/0';时,因为

空间不够,产生了越界错误。

(c):当读入'/n'时,意味着从输入中读入一行字符这个操作即将完成,此时需要做的就是将该'/n'和'/0'放入s[i]中。

(d):当读入的字符为EOF,意味到达文件尾,输入中已经没有字符可供读入了,故再将/0'读入到s中,以形成一个字符串,

这个字符串被存储在字符数组s中。

3,  copy函数中while判断条件:(to[i] = from[i]) != '/0' 精干简洁。

转载于:https://www.cnblogs.com/roma823/archive/2011/04/20/2101246.html

读入一组文本行,打印最长的文本行相关推荐

  1. 最长回文子序列与最长回文子串

    最长回文子序列与最长回文子串不同. 字符串的子串:一个字符串中连续的一段就是这个字符串的子串. 最长回文子串:就是字符串中最长的身为回文串的子串. 最长回文子序列不一定连续 最长回文子序列: 方法一: ...

  2. 最长回文子串与最长回文子序列

    文章目录 最长回文子串与最长回文子序列 最长回文子串 题目描述 dp解法 从中心扩展 马拉车算法 最长回文子序列 题目描述 dp 解法 递归思想 最长回文子串与最长回文子序列 最长回文子串 LeetC ...

  3. 【代码训练营】day56 | 647. 回文子串 516.最长回文子序列

    所用代码 java 回文子串 LeetCode 647 题目链接:回文子串 LeetCode 647 - 中等 思路 dp[i] [j]:[i, j]子串是否是回文子串,是回文就是true 递推公式: ...

  4. 字符串最长回文子串_最长回文子串

    字符串最长回文子串 Problem statement: 问题陈述: Given a string str, find the longest palindromic substring. A sub ...

  5. 51NOD 1088 最长回文子串1089 最长回文子串 V2(Manacher算法)

    回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入一个字符串Str,输出Str里最长回文子串的长度. Input 输入Str(Str的长度 <= 1000(第二题要 ...

  6. 【回文字符串】 最长回文子串O(N) Manacher算法

    原理讲的清晰:Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串 注意: ①动态生命P[]和newStr数组后,不要忘记delete[] //其实这是基本的编码习惯 ②最终 ...

  7. 最长回文子串java_5. 最长回文子串

    最长回文子串 难度 中等 给你一个字符串s,找到s中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba&qu ...

  8. python求最大回文数_python最长回文串算法

    给定一个字符串,要求在这个字符串中找到符合回文性质的最长子串.所谓回文性是指诸如 "aba","ababa","abba"这类的字符串,当然 ...

  9. 判断回文串,最长回文串方法

    1.判断回文串 回文串就是从左看与从右看都是一样的字符串,例如abcba,acddca 判断一个字符串是否为回文串:如判断s=abcdcba是否为回文串,只要看s以中间位分界线,s的左右两边是否相等即 ...

最新文章

  1. 软件研发之道——知识产权
  2. HTML基础(四):注释、URL参数、访问路径、图片地图
  3. 【通知】有三个人指导以及VIP星球6月份之后升级,你的专属AI顾问了解一下
  4. 给TreeView控件绑定数据
  5. BZOJ4426 : [Nwerc2015]Better Productivity最大生产率
  6. socket用法linux,linux socket编程,要用到哪些函数,和用法介绍?_Linux_天涯问答_天涯社区...
  7. 字符设备驱动高级篇3——自动创建字符设备驱动的设备文件
  8. anaconda降级python_anaconda python更换清华源
  9. 谷歌新竞赛:在欧美长大的AI,也要认识亚非拉的生活丨可参加NIPS
  10. python统计中文字数_Python实现统计文本文件字数的方法
  11. win10系统,字体及软件内容特别小(亲试有效)
  12. Idea查看 破解码
  13. mysql查看cpu使用率_MySQL高CPU使用率
  14. SAP 记账凭证 更改 冲销
  15. 魅族的usb计算机连接无法使用,魅族16怎么连接电脑 魅族手机连接电脑无法识别...
  16. 埃拉托色尼筛选法c语言求最大公约数,用埃拉托色尼筛算法求两个数最大公约数C++的实现...
  17. android新浪微博授权,新浪微博授权认证过程 - Android、iOS开发 - OSCHINA - 中文开源技术交流社区...
  18. 小程序开发中使用节流函数throttle的正确方式
  19. Python学习之面向对象高级编程
  20. Python scapy抓包程序

热门文章

  1. 自适应/响应式网页设计
  2. 调度策略的测试方法及其自动化
  3. 更新:让UpdatePanel支持上传文件
  4. define 解析依赖,判断状态,初始化/触发加载 --------require 同步加载(直接返回)/异步加载(创建匿名模块,判断状态,初始化/触发加载)
  5. Android 水波纹点击效果(Ripple Effect)
  6. PCA原理分析和Matlab实现方法(三)
  7. FLutter入门:异步加载组件FutureBuilder
  8. 如何发布Android Library到maven私有仓库
  9. Bootstrap学习之二:栅格化布局
  10. Solidworks如何绘制装饰螺纹线