1

我想在特定位置检查数组中的某些字符。

该数组以 $$$$ 开头,然后有八个字符,然后是另一个 $,再有八个字符,最后是 $$$$。例如char my_array[50] = "$$$$01FF4C68$02543EFE$$$$";

我想检查所有应该有 $ 的位置是否都有它们。

我可以将数组分成包含字符的三个部分,然后分别测试它们,但有没有更好的方法呢?

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, "$$$$$$$$")

检查数组是否以八个 $ 结尾:strstr(my_array + 16, "$$$$$$$$")

+16 用于移动指针,因此 my_array + 16 的开头将是 $ 应该在的位置。

于 2012-12-02T19:55:12.353 回答
1

您可能想使用strstr functinn 来查找$$$....

于 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

您也可以避免使用 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

不使用该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

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 回答