在C中检查数组中的特定字符

时间:2012-12-02 19:51:48

标签: c

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

数组以$$$$开头,然后有8个字符,然后是另外$ 8,另外8个字符,并以$$$$结束。例如char my_array[50] = "$$$$01FF4C68$02543EFE$$$$";

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

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

8 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:2)

使用strstr()

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

开头

检查数组是否以8 $ strstr(my_array + 16, "$$$$$$$$")

结尾

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

答案 2 :(得分:1)

您可能希望使用strstr功能来查找$$$ ....

答案 3 :(得分:1)

是的,您可能想使用正则表达式,请阅读http://www.peope.net/old/regex.html

答案 4 :(得分:1)

如果您使用POSIX兼容平台,并且某些更复杂的模式即将出现在您的代码中,您可以查看正则表达式,例如PCRE

答案 5 :(得分: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;

答案 6 :(得分: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;
    }
}

答案 7 :(得分: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");