我最近开始学习 C,下面的代码我很难理解。
基本上它是一个接受字符串并显示它的函数,
重复每个字母字符的次数与其字母索引的次数相同,后跟换行符。
#include <unistd.h>
int ft_is_alpha(char c)
{
if ((c >= 'a') && (c <= 'z'))
return (0);
else
return (1);
}
int ft_count(char c)
{
int k;
k = (c - 'a');
return (k);
}
void ft_print(char **argv)
{
int i;
int j;
i = 0;
j = 0;
while (argv[1][i])
{
if (ft_is_alpha(argv[1][i]))
{
write(1, &argv[1][i], 1);
}
else
{
while (j <= ft_count(argv[1][i]))
{
write(1, &argv[1][i], 1);
j++;
}
j = 0;
}
i++;
}
}
int main(int argc, char **argv)
{
if (argc != 2)
{
write(1, "\n", 1);
return (0);
}
ft_print(argv);
write(1, "\n", 1);
return (0);
}
结果:
./a.out "abcd"
abbcccdddd
我不明白的是 ft_print
是如何工作的以及代码在哪里乘以字母。
据我了解如果字符串是alpha,它会一个字母一个字母地写入
。 如果不是
- 在这里我被这个j
困住了。
另外,为什么它在 while 循环结束时将其设为 0
?
有没有办法以某种方式逐行查看代码的作用?
最佳答案
字母乘以内部 while
循环:
while (j <= ft_count(argv[1][i]))
{
write(1, &argv[1][i], 1);
j++;
}
ft_count()
返回字母的字母索引。由于循环每次都会递增 j
,因此它将重复该索引的次数。
这也回答了你的第二个问题,即为什么它在循环后分配j = 0;
。这样下次时间就会再次从 0
开始。如果不这样做,下一个字母将仅按照其索引与前一个字母之间的差异进行重复。
关于c - 重复字母的代码如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45917105/