1.8

阅读: 评论:0

1.8

1.8

这里书上对于参数的讲解比较少,大家可以仔细阅读,注意其中的一些概念,也可以看上一章对于例子中参数的讲解,本章不再讲述。

我们直接看字符数组:

要求编写一个程序将文本中最长的行打印出来,给了以下框架:

while(还有未处理的行)
if(该行比已处理的行还要长)保存该行保存该行的长度
打印最长的行

分析一下就是,将一个文本的每一行都进行判断,找出其中最长的行,保存起来,最后打印出来。

直接看程序:

#include<stdio.h>
#define MAXLINE 1000//定义宏int getline(char line[], int maxline);//函数声明
void copy(char to[], char from[]);//函数声明
int main(void) {int len;int max;char line[MAXLINE];char longest[MAXLINE];max = 0;while((len=getline(line, MAXLINE))>0)if (len > max) {max = len;copy(longest, line);}if (max > 0)printf("%s", longest);return 0;}
//该函数将文本的一行读入s数组中并返回其长度
int getline(char s[], int lim) {int c, i;for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != 'n'; ++i)s[i] = c;if (c == 'n') {s[i] = c;++i;}s[i] = '';return i;
}
//该函数将from数组复制到to数组中,在主函数中就是将目前判断出来的最长的行保存下来
void copy(char to[], char from[]) {int i;i = 0;while ((to[i] = from[i]) != '')++i;
}

我们随便打几行然后 ctrl z 输出,结果如下:

 很明显,这里将最长的行打印了出来。

这个程序思路比较明显,首先定义两个字符数组:char line[MAXLINE]  char longest[MAXLINE],第一个用来接受当前输入的行。引用函数:getline(line, MAXLINE),在函数int getline(char s[], int lim)中进行操作,line就是s[]的实参,MAXLINE是lim的实参,在函数中利用for循坏输入这一行的内容,打到最后,将''给数组最后一位,表明这一行结束。最后返回i,也就是这一行的长度。

引用完函数后,再进行判断if (len > max),第一次判断,由于max初始是0,所以一定是len>max,然后把len赋值给max,之后跟第二行比较,以此类推,每一行都要跟目前最长的进行比较,如果比目前最长的还长,就用新的去替换。

copy(longest, line)下面这个函数引用目的在于将这个目前最长的的行的数组复制到另一个数组里,也就是取出这一行。

最后,等每一行都比较完,最长的行也就确定了,可以放心的打出这一行了。

我们要注意字符数组的构成,先来看这个例子:

#include<stdio.h>
int main(void) {char a[6] = "hello";printf("%s", a);
return 0;
}

结果是:

#include<stdio.h>
int main(void) {char a[5] = "hello";printf("%s", a);
return 0;
}

 如果把6改成5,结果是:

 这样是溢出了

这是因为字符数组最后有个''要占一个位置,所以元素是6个而不是5个,也就是说,他的存储格式是这样的:

hello

''并不是字符串的一部分,但是这个字符串的结束要靠这个'',你总要要给它留个位置。

当然,书中最后还解释了可能出现的问题,不过,我们目前的水平......还涉及不到这样的情况,在此不再讲解。

好,今天先写这些,如有疏漏,还请指正。

 

本文发布于:2024-02-02 09:51:21,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170683868043006.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23