特定の位置で配列内の特定の文字をチェックしたいと思います。
配列は $$$$ で始まり、8 文字、さらに $、さらに 8 文字、$$$$ で終わります。例えばchar my_array[50] = "$$$$01FF4C68$02543EFE$$$$";
$ があるはずのすべての位置に $ があることを確認したいと思います。
配列を文字を含む 3 つの部分に分割し、それらを個別にテストすることもできますが、これを行うより良い方法はありますか?
特定の位置で配列内の特定の文字をチェックしたいと思います。
配列は $$$$ で始まり、8 文字、さらに $、さらに 8 文字、$$$$ で終わります。例えばchar my_array[50] = "$$$$01FF4C68$02543EFE$$$$";
$ があるはずのすべての位置に $ があることを確認したいと思います。
配列を文字を含む 3 つの部分に分割し、それらを個別にテストすることもできますが、これを行うより良い方法はありますか?
なぜ物事を複雑にするのですか?
if (my_array[0] != '$'
|| my_array[1] != '$'
|| my_array[2] != '$'
|| my_array[3] != '$'
|| my_array[12] != '$'
|| my_array[21] != '$'
|| my_array[22] != '$'
|| my_array[23] != '$'
|| my_array[24] != '$')
{
printf("Wrong!\n");
}
使用するstrstr()
配列が 8 つの $ で始まるかどうかを確認するには:strstr(my_array, "$$$$$$$$")
配列が 8 つの $ で終わっているかどうかを確認するには:strstr(my_array + 16, "$$$$$$$$")
+16 はポインターをシフトするためにここにあるため、my_array + 16 の先頭は $ があるはずの場所になります。
...を見つけるために strstr 関数を使用することをお勧めします。$$$
はい、あります。正規表現を使用したい場合があります。 http://www.peope.net/old/regex.htmlをお読みください。
POSIX 互換のプラットフォームを使用していて、さらに複雑なパターンがコードに現れようとしている場合は、PCREなどの正規表現を調べることができます。
string.h
ライブラリを使用しない長いオプションは、次の3つのテストを行うことです。
#include <stdio.h>
int firstTest( char a[] );
int secondTest( char a[] );
int thirdTest( char a[] );
int main (void)
{
int result;
char my_array[50] = "$$$$01FF4C68$02543EFE$$$$";
if( ( firstTest( my_array ) == 1 ) && ( secondTest( my_array ) == 1 ) && ( thirdTest( my_array ) == 1 ) ){
printf( "The string is valid.\n" );
result = 1;
}
else{
printf( "The string is invalid.\n" );
result = 0;
}
return 0;
}
int firstTest( char a[] )
{
int i;
for( i = 0; i < 4; i++ ){
if ( a[i] != '$' ){
return 0;
break;
}
return 1;
}
}
int secondTest( char a[] )
{
if( my_array[12] != '$' )
return 0;
else
return 1;
}
int thirdTest( char a[] )
{
int i;
for( i = 21; i < 25; i++ ){
if ( a[i] != '$' ){
return 0;
break;
}
return 1;
}
}
フォーマットが単純で固定されているため、strstr の使用を避けることもできます。サンプル形式が保持されるまで::
bool ok = strlen(my_array) >= 25 /* just be sure there are at least all expected chars */ &&
strncmp(my_array, "$$$$", 4) == 0 &&
strncmp(my_array + 12, "$", 1) == 0 /* my_array[12] == '$' */&&
strncmp(my_array + 21, "$$$$", 4) == 0;
sscanf が作業を行う必要があります
char my_array[50] = "$$$$01FF4C68$02543EFE$$$$";
int n,m;
if( !sscanf(my_array,"$$$$%*8[0-9A-H]%n$%*8[0-9A-H]$$$$%n",&n,&m) && n==12 && m==25 )
puts("ok");
else
puts("not ok");