gpt4 book ai didi

c - C中的奇怪算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:35 24 4
gpt4 key购买 nike

我正在做“The C Programming Language”一书中的一个练习: http://users.powernet.co.uk/eton/kandr2/krx116.html

在下面的程序中,如果输入文件包含行 'h\n',例如,getline 函数将 i 和 j 初始化为 0。由于 'h' 不是 EOF 或 '\n',循环执行,c 被分配给 s 数组指针的 0 索引,因为 j 是 0。然后 j 递增到 1。然后 block 结束并且 i 计数器递增到 1。循环检查下一个字符是否是 a '\n',它是,所以 block 退出。此时,i和j都等于1。由于c等于'\n',c被插入到s指针的索引1,因为j为1。然后j自增2。然后i自增到 2。然后空终止符 '\0' 被插入到 s 指针的索引 2 中,因为 j 是 2。然后函数返回 2,因为 i 也是 2。

我看不出 j 变量有什么意义。因为当它递增时,i 也会递增。有人说我错了:

”因为它们以不同的速率递增。i计数器用于跟踪字符串的长度。j变量在处理结束时存储空终止符需要进入的点字符串。”

但我说因为 i 和 j 是相同的值(一个只是在另一个之后递增),你可以使用 i 到空终止符需要去的地方,因为我在上面也等于 2示例。

#include <stdio.h>

#define MAXLINE 1000 /* maximum input line size */

int getline(char line[], int maxline);
void copy(char to[], char from[]);

/* print longest input line */
int main(void)
{
int len; /* current line length */
int max; /* maximum length seen so far */
char line[MAXLINE]; /* current input line */
char longest[MAXLINE]; /* longest line saved here */

max = 0;

while((len = getline(line, MAXLINE)) > 0)
{
printf("%d: %s", len, line);

if(len > max)
{
max = len;
copy(longest, line);
}
}
if(max > 0)
{
printf("Longest is %d characters:\n%s", max, longest);
}
printf("\n");
return 0;
}

/* getline: read a line into s, return length */
int getline(char s[], int lim)
{
int c, i, j;

for(i = 0, j = 0; (c = getchar())!=EOF && c != '\n'; ++i)
{
if(i < lim - 1)
{
s[j++] = c;
}
}
if(c == '\n')
{
if(i <= lim - 1)
{
s[j++] = c;
}
++i;
}
s[j] = '\0';
return i;
}

/* copy: copy 'from' into 'to'; assume 'to' is big enough */
void copy(char to[], char from[])
{
int i;

i = 0;
while((to[i] = from[i]) != '\0')
{
++i;
}
}

我是对还是错?

最佳答案

你说的不太对。如果输入字符串比限制长,循环将继续递增 i 以计算输入字符,即使它们没有进入结果字符串也是如此。

关于c - C中的奇怪算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20276967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com