比较C语言中字符数组的子范围

3

我想使用strcmp比较字符数组的子范围和另一个字符串。我通过从文本文件中读取并将它们连接成一个更长的字符数组来创建dna字符数组。

char dna[10] = "ATGGATGATGA";
char STOP_CODON[3] = "TAA"; 
int TS1 = strcmp(&STOP_CODON[0]),dna[0]);
int TS2 = strcmp(&STOP_CODON[1]),dna[1]); 
int TS3 = strcmp(&STOP_CODON[2]),dna[2]);

if(T1+T2+T3) == 3 {
   int T = 1;  
} 

因此,如果它们全部匹配,则T返回为true(1)。 我想将STOP_CODON与三个字符的子范围中的DNA进行比较。 我无法找到简单的方法来做到这一点。在matlab中,您可以执行以下操作:

strcmp(STOP_CODON[1:3],dna[1:3])

在C语言中是否可以实现这样的功能?我希望最终能够遍历整个dna数组,该数组实际上包含60000个字符。

printf("%s.6\n",&dna[1]); 

printf具有这种功能,但我想使用strcmp完成。在C中是否有比此更有效的方法?


3
strncmp(dna + offset, STOP_CODON, 3); - Daniel Fischer
2
甚至可以这样:strstr() 顺便说一下,char STOP_CODON[3] = "TAA"; 这样会导致数组没有以空字符结尾。最好使用 char STOP_CODON[] = "TAA"; 替代。 - wildplasser
2个回答

6
你不能使用 strcmp 来完成这个任务,因为它只会比较字符串直到遇到空字符 ('\0')。相反,你可以使用 memcmp 比较指定数量的字节,或者使用 strncmp 来比较指定数量的字符。
// Compare up to 3 characters, stopping at the first null character.
if (strncmp(STOP_CODON, dna, 3) == 0) {
   // they match
}

或者

// Copy exactly 3 bytes, even if they contain null characters.
if (memcmp(STOP_CODON, dna, 3) == 0) {
  // they match
}

请注意,当字符串匹配时,这两个函数都返回0(而不是1)。如果第一个字符串“小于”第二个字符串,则它们将返回一个小于零的数字,如果第二个字符串“小于”第一个字符串,则返回一个大于零的数字。

2

你只需通过将指针加上偏移量来进入字符串。

const char* test = "This is a test.";
printf("%s", test+5);   // prints "is a test.";

然后您可以使用strncmp来限制您正在检查的子字符串的长度,该函数需要一个长度参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接