将一个数组的某些内容复制到另一个数组,而不重复包含的数据

时间:2010-08-18 14:05:11

标签: c

美好的一天, 我有两个数组,我想将一些数据从第一个数组复制到第二个数组而不重复第二个数组中的任何值。有人告诉我我没有到达这里。

#include <stdio.h>          
#include <stdlib.h>         
#include <string.h>

main()
{
    char *hours;
    char *strl;
    hours = {0,0,0,0,1,1,2,2,2,5,5,10,10,10,10,10,.,.,.,23};

    strl=calloc(100,sizeof(char));

    sprintf(strl, "%d", hours);

    if(strcmp(strl, hours))
    {
        if(*strl)
            strcpy(strl,hours);
    } 
    printf("%s ",strl;
}

3 个答案:

答案 0 :(得分:0)

首先,你有两个字符数组。现在,在C中,字符数组通常用于存储字符串,但您没有这样做。这些根本不是字符串,所以忘记库中的字符串函数。

你实际拥有的是两个微小整数数组,所以你像处理一个int数组一样处理它们。

#include <stdio.h>           
#include <stdlib.h>          

 int main() 
 { 
   char *hours; 
   char *strl; 
   int i;
   int j;
   char last;
   /* I'm going to assume the the values in hours are sorted. */
   hours={0,0,0,0,1,1,2,2,2,5,5,10,10,10,10,10,.,.,.,23} 

   strl=calloc(100,sizeof(char)); 

   j = 0;
   last = hours[0];
   for(i=1; i < 100; ++i) // I'm going to assume hours has 100 items
   {
       if (hours[i] != last)
       {
           strl[j++] = last;
           last = hours[i];
        }
   }
   strl[j++] = last;    // UPDATE (Thanks, Matthew)
 }

/*    printf("%s ",strl; 
    You'll need a different way of printing you results */
} 

答案 1 :(得分:0)

你可能想做更多的事情:

char *dst = strl;
char *cur = hours;
char prev = '\0';
while(*cur) {
  if(*cur != last) {
    prev = *dst = *cur;
    dst++;
  }
  cur++;
}

哦,是的,正如其他人所说,你的数组不会以'\0'终止,所以标准的字符串函数不起作用(对于那个问题我的循环也不会。)

其次没有标准的C库函数可以做你想要的......我会把它留给你修复我的循环。 (注意它只在数组排序时才有效)

答案 2 :(得分:0)

正如James所说,你不能使用字符串函数,因为你的数组不是NUL终止的。即使你可以,strcmp总是返回非零(特别是负数),*strl总是0,这意味着内部总是失败。最后strcpy不会消除任何重复。如果对数组进行了排序,则可以通过检查重复的连续值来执行此操作。否则,您可以使用像GHashTable这样的哈希集/哈希表。