Ben*_*sen 2 c arrays range char
我想使用 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;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果它们都匹配,则 T 返回为 true(1) 我想在三个字符的子范围内将 STOP_CODON 与 dna 进行比较。我想不出一种简单的方法来做到这一点。在 matlab 中,您可以执行以下操作:
strcmp(STOP_CODON[1:3],dna[1:3])
Run Code Online (Sandbox Code Playgroud)
在 C 中可能有这样的事情吗?我想用它最终遍历整个 dna 数组,实际长度为 60,000 个字符
printf("%s.6\n",&dna[1]);
Run Code Online (Sandbox Code Playgroud)
printf 有这种功能,但我想用 strcmp 做到这一点。在 C 中有比这更有效的东西吗?
你不能用 来做到这一点strcmp,它会比较字符串,直到它看到一个空 ( '\0') 字符。相反,请使用memcmp(比较特定字节数)或strncmp(允许您指定要比较的最大字符数)。
// Compare up to 3 characters, stopping at the first null character.
if (strncmp(STOP_CODON, dna, 3) == 0) {
// they match
}
Run Code Online (Sandbox Code Playgroud)
或者
// Copy exactly 3 bytes, even if they contain null characters.
if (memcmp(STOP_CODON, dna, 3) == 0) {
// they match
}
Run Code Online (Sandbox Code Playgroud)
另请注意,当字符串匹配时,这两个函数都返回 0(而不是 1)。他们会返回一个数字少大于零,如果第一个字符串为“小于”第二或数大于大于零,如果第二个字符串为“小于”的第一位。