C 在数组中列出不重复的字符

C 在数组中列出不重复的字符,c,arrays,C,Arrays,嗯,我的问题很简单,但我已经被困了很长一段时间了。我想写一个以两个数组为参数的程序,然后按照外观顺序在其中写入不重复的字母 例如: $ ./a.out bulwark blue bulwarke $ ./a.out fresh feeling freshling $ ./a.out final01 test02 final01tes2 我尝试了几种方法,但没有malloc,我想不出该怎么做。棘手的是,我不能使用malloc,唯一授权的函数是“write” 请注意:很抱歉我的英语不好请使用辅

嗯,我的问题很简单,但我已经被困了很长一段时间了。我想写一个以两个数组为参数的程序,然后按照外观顺序在其中写入不重复的字母

例如:

$ ./a.out bulwark blue
bulwarke

$ ./a.out fresh feeling
freshling

$ ./a.out final01 test02
final01tes2
我尝试了几种方法,但没有
malloc
,我想不出该怎么做。棘手的是,我不能使用
malloc
,唯一授权的函数是“write”


请注意:很抱歉我的英语不好

请使用辅助数组指示已使用的字母:

void func(char arr1[],char arr2[])
{
    int hash[256] = {0};
    for (int i=0; arr1[i]!=0; i++)
    {
        unsigned char letter = (unsigned char)arr1[i];
        if (hash[letter] == 0)
        {
            hash[letter] = 1;
            printf("%c",letter);
        }
    }
    for (int i=0; arr2[i]!=0; i++)
    {
        unsigned char letter = (unsigned char)arr2[i];
        if (hash[letter] == 0)
        {
            hash[letter] = 1;
            printf("%c",letter);
        }
    }
    printf("\n");
}

注意:此代码假定每个输入字符串(
arr1
arr2
)都以0字符结尾。

只需跟踪您打印的内容即可。下面的内容对于char来说很好,因为它们太少了。用一个足够长的数组来跟踪unicode字符,这对于所有可能的值来说都是疯狂的。在这种情况下,将标识符插入到散列可能是更好的选择,但由于unicode不是考虑的一部分,下面应该足够好了

#include <stdio.h>
int main(int argc, char **argv)
{
    char arr[256] = { 0 };
    int i, j;

    for (i = 1; i < argc; i++)
        for (j = 0; argv[i][j]; j++)
            if (!arr[argv[i][j]]) {
                arr[argv[i][j]] = 1;
                printf("%c", argv[i][j]);
            }
    putchar('\n');
    return 0;
}
#包括
int main(int argc,字符**argv)
{
char arr[256]={0};
int i,j;
对于(i=1;i
为什么需要
malloc
?单词只是argv[1]和argv[2]。所以你可以用斯特伦来解决这个问题。我觉得不需要malloc。你考虑过对数组进行排序吗?你能展示你最好的编码尝试吗?请阅读。注意,
char
可以签名。是的;好评;刚刚修复了第一个问题']',并将在一分钟内修复第二个问题。如果输入是纯ASCII,当然没有问题。我想我会在注释中提到这一点,但函数需要两个
char
数组,所以…请注意,char可能是有符号的。