1

特定の位置で配列内の特定の文字をチェックしたいと思います。

配列は $$$$ で始まり、8 文字、さらに $、さらに 8 文字、$$$$ で終わります。例えばchar my_array[50] = "$$$$01FF4C68$02543EFE$$$$";

$ があるはずのすべての位置に $ があることを確認したいと思います。

配列を文字を含む 3 つの部分に分割し、それらを個別にテストすることもできますが、これを行うより良い方法はありますか?

4

8 に答える 8

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");
}
于 2012-12-02T20:02:00.910 に答える
2

使用するstrstr()

配列が 8 つの $ で始まるかどうかを確認するには:strstr(my_array, "$$$$$$$$")

配列が 8 つの $ で終わっているかどうかを確認するには:strstr(my_array + 16, "$$$$$$$$")

+16 はポインターをシフトするためにここにあるため、my_array + 16 の先頭は $ があるはずの場所になります。

于 2012-12-02T19:55:12.353 に答える
1

...を見つけるために strstr 関数を使用することをお勧めします。$$$

于 2012-12-02T19:53:45.533 に答える
1

はい、あります。正規表現を使用したい場合があります。 http://www.peope.net/old/regex.htmlをお読みください。

于 2012-12-02T19:57:19.717 に答える
1

POSIX 互換のプラットフォームを使用していて、さらに複雑なパターンがコードに現れようとしている場合は、PCREなどの正規表現を調べることができます。

于 2012-12-02T19:58:15.987 に答える
0

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;
    }
}
于 2012-12-02T20:11:06.573 に答える
0

フォーマットが単純で固定されているため、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;
于 2012-12-02T20:01:57.617 に答える
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");
于 2012-12-02T20:46:58.057 に答える