首页 >> 大全

1.8-1.9字符数组

2023-12-18 大全 27 作者:考证青年

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

我们直接看字符数组

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

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

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

直接看程序:

#include
#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] = '\0';return i;
}
//该函数将from数组复制到to数组中,在主函数中就是将目前判断出来的最长的行保存下来
void copy(char to[], char from[]) {int i;i = 0;while ((to[i] = from[i]) != '\0')++i;
}

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

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

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

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

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

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

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

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

结果是:

数组字符串常用方法_数组字符串长度怎么算_

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

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

这样是溢出了

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

\0

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

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

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

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了