比较C中char数组的子范围

时间:2012-12-09 23:02:54

标签: c arrays char range

我想使用strcmp将char数组的子范围与另一个字符串进行比较。 我通过读取文本文件然后将它们连接成一个更长的char数组来制作dna char数组。

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返回为真(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中有比这更有效的东西吗?

2 个答案:

答案 0 :(得分:4)

您无法使用strcmp执行此操作,'\0'将比较字符串,直到它看到空(// Compare up to 3 characters, stopping at the first null character. if (strncmp(STOP_CODON, dna, 3) == 0) { // they match } )字符。相反,使用比较特定字节数的memcmpstrncmp,它允许您指定要比较的最大字符数。

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

{{1}}

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

答案 1 :(得分:1)

您只需通过添加指针即可抵消字符串。

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

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