2

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 は true(1) として返されます。STOP_CODON を 3 文字のサブレンジで dna と比較したいと思います。これを簡単に行う方法がわかりません。matlab では、次のことができます。

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

Cでこのようなことは可能ですか?これを使用して、実際には60,000文字の長さであるdna配列全体を最終的に反復処理したい

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

printfにはこのような機能がありますが、strcmpでこれを行いたいです。Cでこれより効率的なものはありますか?

4

2 に答える 2

5

strcmpnull ( '\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
}

また、文字列が一致する場合、これらの関数は両方とも (1 ではなく) 0 を返すことに注意してください。最初の文字列が 2 番目の文字列より「小さい」場合は 0 より小さい数値を返し、2 番目の文字列が最初の文字列より「小さい」場合は 0より大きい数値を返します。

于 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 に答える