2

我想使用 strcmp 将 char 数组的子范围与另一个字符串进行比较。我通过从文本文件中读取然后将它们连接成更长的字符数组来制作 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 数组,实际上是 60,000 个字符长

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

printf 有这种功能,但我想用 strcmp 来做。在C中有比这更有效的东西吗?

4

2 回答 2

5

您不能使用 来执行此操作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)。如果第一个字符串“小于”第二个字符串,它们将返回一个小于零的数字,如果第二个字符串“小于”第一个字符串,它们将返回一个大于零的数字。

于 2012-12-09T23:05:23.863 回答
1

您只需通过添加到指针来偏移到字符串中。

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

strncmp然后,您可以使用带有长度参数的 来限制要检查的子字符串的长度。

于 2012-12-09T23:05:40.940 回答