我想比较两个数组。这两个数组都包含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表示没有更改。
如果有什么不清楚,请告诉我,我会尽力澄清。
答案 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);
}