我想使用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中有比这更有效的东西吗?
答案 0 :(得分:4)
您无法使用strcmp
执行此操作,'\0'
将比较字符串,直到它看到空(// Compare up to 3 characters, stopping at the first null character.
if (strncmp(STOP_CODON, dna, 3) == 0) {
// they match
}
)字符。相反,使用比较特定字节数的memcmp或strncmp,它允许您指定要比较的最大字符数。
// 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
来限制您正在检查的子字符串的长度,这需要一个长度参数。