Char数组比较

时间:2014-10-22 02:13:25

标签: c arrays

我想比较两个数组。这两个数组都包含15个字符。我想看看他们是否有相同的元素。

正在读入数组的字符

Array1:ATGGAATTCTCGCTC

Array2:TTGGAATTCTAGCTC

这些都是数组的形式,并作为arrayt和arraymt传入。 n_size和m_size是每个数组的大小。(这是因为数组的长度可以是1-15)

int mutations(char arrayt[],char arraymt[],int n_size,int m_size)
{
    int i=0,mutation=0;
    do{
        for(i=0;i<n_size;i++)
        {
            if (arrayt[i]==arraymt[i])
            {
                mutation=1;
            }
        }
    }while(n_size == m_size);
    return mutation;
}

这是我到目前为止找到两个数组差异的代码。问题是我不知道如果每个元素有差异我可以返回的方式。 1表示更改,0表示没有更改。

如果有什么不清楚,请告诉我,我会尽力澄清。

3 个答案:

答案 0 :(得分:0)

void mutations(char arrayt[],char arraymt[], int *result, int max_index)
{
  int i = 0;
  for (i = 0; i < max_index; i++)
  {
    if (arrayt[i] == arraymt[i])
    {
      result[i] = 0;
      continue;
    }
    else
    {
      result[i] = 1;
    }
  }
}

int main()
{
  int i = 0;
  int max_index;
  int *res;

  char arrayt[]  = "aabbccduu";
  char arraymt[] = "aabcccd";

  max_index = strlen(arrayt) <= strlen(arraymt) ? strlen(arrayt) : strlen(arraymt);

  res = calloc (1, sizeof(int) * max_index);
  if (res != NULL)
  {
    mutations(arrayt, arraymt, res, max_index);
    while (i < max_index)
    {
      printf("res[i] = %d\n", res[i]);
      i++;
    }

    free(res);
  }
  return 0;
}

答案 1 :(得分:0)

您需要的代码可能是:

int* mutations(char arrayt[],char arraymt[],int n_size,int m_size)
{
    int i, size;
    int* mutation;

    // size = min(m_size,n_size)
    if n_size>m_size
       size=m_size;
    else
       size=n_size;
    endif

    mutation=*malloc( sizeof(int) * size); // allocate memory for return value


    for(i=0;i<size;i++)
    {
        if (arrayt[i]==arraymt[i])
        {
            mutation[i]=1;
        } else {
            mutation[i]=0;
        }
     }

    return mutation;
}

答案 2 :(得分:0)

让我们使用unsigned的15位来记录结果。

unsigned mutations(char arrayt[], char arraymt[], int n_size, int m_size) {
  int sizemin = min(n_size, m_size);
  int sizemax = max(n_size, m_size);
  unsigned dest = 0;
  int i;
  for (i = 0; i < sizemin; i++) {
    if (arrayt[i] == arraymt[i])
      dest |= 1 << i;
  }
  for (; i < sizemax; i++) {
    dest |= 1 << i;  // compares against empty values are set to 1
  }

  return dest;
}

void foo(void) {
  const char *Array1 = "ATGGAATTCTCGCTC";
  const char *Array2 = "TTGGAATTCTAGCTC";
  unsigned result = mutations(Array1, Array2, strlen(Array1), strlen(Array1));

  // LSBit contains the result of the compare of Array1[0] vs. Array1[1]
  printf("%X\n", result);
}