【发布时间】:2019-11-27 15:26:45
【问题描述】:
我正在努力锻炼,我目前正在与 42 名为 1337 的附属学校一起做一个游泳池(如果你好奇为什么)。
- 我应该编写一个程序来显示命令行中给定的参数,按 ascii 顺序排序。
- 我应该显示所有参数,除了 argv[0]。
- 每个参数都应该在它自己的行中(基本上放一个 \n)。
绝对禁止使用 printf 并被视为作弊,我被允许使用的唯一函数是 write(),来自 unistd.h 库#include
我做了其他练习,我将链接到你,一个正常显示参数,一个以相反的顺序显示参数。
下面的代码实际上只是打印参数
#include <unistd.h>
void ft_putchar(char ch)
{
write(1, &ch, 1);
}
void ft_print_params(int argc, char *argv)
{
int i;
i = 0;
while (i < argc)
{
while (argv[i] != '\0')
{
ft_putchar(argv[i]);
i++;
}
i++;
}
}
int main(int argc, char **argv)
{
int i;
i = 1;
while (i < argc)
{
ft_print_params(argc, argv[i]);
ft_putchar('\n');
i++;
}
return (0);
}
下面的程序以相反的顺序打印参数。
#include <unistd.h>
void ft_putchar(char ch)
{
write(1, &ch, 1);
}
void ft_print_params(char *argv)
{
int i;
i = 0;
while (argv[i] != '\0')
{
ft_putchar(argv[i]);
i++;
}
}
int main(int argc, char **argv)
{
int i;
i = argc;
if (1)
{
while (i > 1)
{
ft_print_params(argv[i - 1]);
ft_putchar('\n');
i--;
}
}
return (0);
}
因此,如果有人可以帮助我,我会很高兴,无论是想法,还是一些代码,并在可能的情况下提供一些解释。
谢谢。
【问题讨论】:
-
你可以使用
qsort()吗? -
你知道如何对字符串数组进行排序吗?然后你就准备好了,因为这就是
argv的全部内容:一个字符串数组(它是一个指针数组,但你可以将其视为一个字符串数组)。 -
你发布的两个版本的代码在我看来是一样的。你为什么将
argc传递给ft_print_params? -
@Shawn 不,我不是,允许使用它,唯一允许我使用的功能是写入,仅用于打印。
-
@Someprogrammerdude 是的,我知道该怎么做,但我有点困惑。
标签: c bash shell command-line-arguments