【发布时间】:2021-10-13 08:58:44
【问题描述】:
我尝试为 K&R 书中的 C 语言练习实现一个解决方案。我想在这里问一下这是否可以被认为是合法的“解决方案”,只需修改main而不更改外部函数内部的内容。
修改最长行程序的主程序,使其能够 正确打印任意长输入行的长度,以及尽可能多的 尽可能的文字。
#include <stdio.h>
#define MAXLINE 2 ////
int get_line1(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;
}
int main()
{
int len;
int max = MAXLINE;
char line[MAXLINE];
int tot = 0;
int text_l = 0;
while ((len = get_line1(line, max)) > 0) {
if (line[len - 1] != '\n') {
tot = tot + len;
}
if (line[1] == '\n' || line[0] == '\n') {
printf("%d\n", tot + 1);
text_l = text_l + (tot + 1);
tot = 0;
}
}
printf("%d\n", text_l);
}
这个想法是为数组line ad 2 设置考虑的字符串的最大长度。
对于abcdef\n 的字符串,数组line 将是ab。由于数组的最后一个元素不是\n(因此我们正在考虑的行没有结束),我们将长度保存到现在并重复循环。然后我们将获得由cd 组成的数组,然后是ef,最后我们将获得由\n 组成的数组。然后执行else if条件,因为这个数组的第一个元素是\n,我们打印前面加法得到的tot长度。我们添加 +1 是为了同时考虑新字符 \n。这也适用于奇数字符串:使用abcdefg\n,该过程将继续进行,直到我们达到g\n,并且总和正确完成。
在循环之外,我们打印文本的总量。
这是正确的练习方式吗?
【问题讨论】:
-
满足要求的每个解决方案都同样正确。