我想在某些位置检查数组中的某些字符。
数组以$$$$开头,然后有8个字符,然后是另外$ 8,另外8个字符,并以$$$$结束。例如char my_array[50] = "$$$$01FF4C68$02543EFE$$$$";
我想检查所有应该是$的位置是否有它们。
我可以将数组拆分为包含字符的三个部分,然后分别测试它们,但有更好的方法吗?
答案 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");