我正在努力地锻炼身体,目前我正在一所会员学校里的42个叫1337的游泳池里打球(以防您好奇为什么)。
绝对禁止使用printf,并且将其视为作弊手段,唯一允许我使用的功能是unistd.h库#include
中的write()。我已经完成了其他一些练习,这些练习将与您链接,一个练习可以正常显示参数,而另一个练习则可以相反的顺序显示。
下面的代码实际上只是打印参数
#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);
}
因此,如果有人可以帮助我,或者提供想法,或者提供一些代码,并提供一些解释,我会很乐意。
谢谢。
答案 0 :(得分:2)
您可以编写一个函数来对char *
数组进行简单的插入排序:
#include <string.h>
void ft_sort_strings(int num, char **s)
{
int i, j;
for (i = 1; i < num; i++)
{
for (j = i; j > 0 && strcmp(s[j-1], s[j]) > 0; j--)
{
char *temp = s[j-1];
s[j-1] = s[j];
s[j] = temp;
}
}
}
然后,从main
对其进行调用以对argv
进行排序,跳过第一个元素:
ft_sort_strings(argc - 1, argv + 1);
然后,您只需要遍历参数并像以前一样打印它们即可。
如果不允许使用标准库中的strcmp
,则很容易用您自己的ft_strcmp
替换它:
int ft_strcmp(const char *a, const char *b)
{
while (*a && *a == *b)
{
a++;
b++;
}
return *a - *b;
}