BYTE数组里查找是否含有某个字符串?
假如:
BYTE = test[1024*4];
test[0] = 0;
test[1] = 0;
.
.
.
test[100] = 179;
test[101] = 175;
test[102] = 207;
test[103] = 202;
.
.//其他值及0
.
char test1[256];
memset(test1,0,sizeof(test1));
test1[0] = 179;
test1[1] = 175;
test1[2] = 207;
test1[3] = 202;
如何知道test数组里是否含有test1字符串?
test数组里含有0。一个比较笨的方法是通过循环查找,还有其它的效率更高的方法吗?
[解决办法]
不知道字符串的动态规划算法能不能符合你的要求,这个算法也是查找子字符串的
我只知道有这个算法,其他的不懂。。LCS算法
[解决办法]
KMP???
[解决办法]
用什么算法也避不开循环吧?
[解决办法]
char类型范围溢出了,所以是找不到了,将char改为BYTE再查找,循环也不慢啊,在循环中将test[i]和test1[0]做比较,相同的话再使用memcpy来直接比较,示例代码如下:
int findSub(BYTE *pSrc ,int nSrcLen,BYTE *pSub ,int nSubLen)
{
for (int i = 0; i != nSrcLen-nSubLen ;++i)
{
if (pSrc[i] == pSub[0])
{
if (memcmp(pSrc+i ,pSub ,nSubLen) == 0)
{
return i;
}
}
}
return -1;
}
int main()
{
BYTE test[1024*4];
test[0] = 0;
test[1] = 0;
test[10] = 179;
test[11] = 175;
test[12] = 207;
test[13] = 202;
BYTE test1[256];
memset(test1,0,sizeof(test1));
test1[0] = 179;
test1[1] = 175;
test1[2] = 207;
test1[3] = 202;
int n = findSub(test ,1024*4 ,test1 ,4);
if(n != -1)
printf("test在位置%d处包含test1\n " ,n) ;
else
printf( "test中不包含test1\n" );
return 0;
}
case 'F':
gotoxy(1,49);
cprintf("Find:");
gets(fstr);
if (fstr[0]==39) {
lenf=strlen(fstr)-1;
for (j=0;j<lenf;j++) {
if (fstr[j+1]=='?') bw[j]=1;
else {
bw[j]=0;
bf[j]=fstr[j+1];
}
}
} else {
i=0;
for (j=0;j<40;j++) {
if (fstr[i]==0x0D
[解决办法]
fstr[i]==0x0A
[解决办法]
fstr[i]==0x1A
[解决办法]
fstr[i]==0) {
fstr[i]=0;
break;
}
while (fstr[i]==' '
[解决办法]
fstr[i]==9) {
fstr[i]=0;
i++;
}
ag[j]=fstr+i;
while (fstr[i]!=9&&fstr[i]!=' '&&fstr[i]!=0x0D&&fstr[i]!=0x0A&&fstr[i]!=0x00) i++;
}
lenf=j;
for (i=0;i<lenf;i++) {
if (isxdigit(ag[i][0])) {
bw[i]=0;
sscanf(ag[i],"%2x",&bf[i]);
} else {
bw[i]=1;
}
}
}
bf[lenf]=0;
find=1;
off=offset;
fseek(f,off,SEEK_SET);
for (i=0;i<lenf;i++) {
bb[i]=fgetc(f);
}
if (feof(f)) {
gotoxy(1,49);
cprintf("%s Not find",bf);
getch();
mygotoxy(0,0);
break;
}
while (1) {
match=1;
for (j=0;j<lenf;j++) {
if (bw[j]==0&&bf[j]==bb[j]) continue;
if (bw[j]==1) continue;
match=0;
break;
}
if (match==1) {
offset=off;
mygotoxy(0,0);
if (yy==0) {
if (offset>=16) offset-=16;
} else {
mygotoxy(xx,yy-1);
}
dump(offset);
if (offset+(yy+1)*16+xx<length) {
if (yy==47) {
if (offset<length-0x300L) offset+=16;
} else {
mygotoxy(xx,yy+1);
}
}
dump(offset);
break;
} else {
memmove(bb,bb+1,lenf-1);
bb[lenf-1]=fgetc(f);
if (feof(f)) {
gotoxy(1,49);
cprintf("%s Not find",bf);
getch();
mygotoxy(0,0);
break;
}
off++;
}
}
break;
case 'N':
if (find!=0) {
off=offset+lenf+16;
fseek(f,off,SEEK_SET);
for (i=0;i<lenf;i++) {
bb[i]=fgetc(f);
}
if (feof(f)) {
gotoxy(1,49);
cprintf("%s Not find",bf);
getch();
mygotoxy(0,0);
break;
}
while (1) {
match=1;
for (j=0;j<lenf;j++) {
if (bw[j]==0&&bf[j]==bb[j]) continue;
if (bw[j]==1) continue;
match=0;
break;
}
if (match==1) {
offset=off;
mygotoxy(0,0);
if (yy==0) {
if (offset>=16) offset-=16;
} else {
mygotoxy(xx,yy-1);
}
dump(offset);
if (offset+(yy+1)*16+xx<length) {
if (yy==47) {
if (offset<length-0x300L) offset+=16;
} else {
mygotoxy(xx,yy+1);
}
}
dump(offset);
break;
} else {
memmove(bb,bb+1,lenf-1);
bb[lenf-1]=fgetc(f);
if (feof(f)) {
gotoxy(1,49);
cprintf("%s Not find",bf);
getch();
mygotoxy(0,0);
break;
}
off++;
}
}
}
break;