c - 重复字母的代码如何工作?

标签 c function

我最近开始学习 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/

相关文章:

C - msgrcv 在收到的消息中添加字符,很奇怪

c - 类型定义不完整 (struct)

R 检查是否有任何缺少的参数

javascript - 如果变量 B 未定义,则替换包含 document.location.path 的变量 A

c - read() 的奇怪行为

c - 字符串 EOF 或任何其他替代方案

将 "##:##"形式的字符串转换为时间类型,然后等待该时间

javascript - 检查按钮 "hasn' t"是否在一定时间内被点击 (jQuery)

c - 使用 mem alloc 通过指针或指向指针的指针将字符串数组发送到函数?

python:返回列表方法以索引作为参数