2012-12-02 13 views
1

我想在某些位置的陣列,以檢查某些字符。檢查陣列中的特定字符用C

數組始於$$$$則有八個字符,然後又$,八個字符,並與$$$$完成。例如char my_array[50] = "$$$$01FF4C68$02543EFE$$$$";

我要檢查那裏應該是$所有職位確實有他們。

我可能分裂數組包含的字符,然後分別測試他們,但有沒有這樣做的更好的辦法三個部分?

+1

像'strstr'? –

+0

你使用什麼平臺? –

+0

所以它總是''$$$$ + 8 +'$'+ 8 +''$$$$?如果是這樣,只需使用一個循環並跟蹤位置。 – netcoder

回答

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"); 
} 
+0

是的,看起來不錯,謝謝 –

+0

搞笑:) +1簡單! –

1

您可能需要使用strstr functinn找到$$$ ....

2

使用strstr()

要檢查,如果數組有八個$開頭:strstr(my_array, "$$$$$$$$")

要檢查數組以八位結尾:strstr(my_array + 16, "$$$$$$$$")

+16在這裏移動指針,所以my_array + 16的開頭將是$的位置是s無可奈何。

+0

看起來不錯,我會檢查一下。謝謝 –

1

如果使用POSIX兼容的平臺以及一些更爲複雜的模式是你的代碼中出現,你可以去看看正則表達式,例如PCRE

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; 
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; 
    } 
} 
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");