我正在努力进行练习,我目前正在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);
}
因此,如果有人可以通过想法或一些代码,并在可能的情况下提供一些帮助,我将很乐意。
谢谢。
您可以编写一个函数来对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
以sort 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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句