如何使用C语言以ASCII顺序对命令行参数进行排序

用户名

我正在努力进行练习,我目前正在42所名为1337的会员学校里做一个游泳池(以防您好奇为什么)。

  • 我应该写一个程序,显示在命令行中按ascii顺序排序的参数。
  • 我应该显示所有参数,除了argv [0]。
  • 每个参数都应放在自己的行中(基本上放在\ n内)。

绝对禁止使用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);  
}

因此,如果有人可以通过想法或一些代码,并在可能的情况下提供一些帮助,我将很乐意。

谢谢。

伊恩·雅培(Ian Abbott)

您可以编写一个函数来对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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章