做了个带通配符 ?查找字符串的题,算法有错误,帮忙看

来源:百度知道 编辑:UC知道 时间:2024/07/03 01:30:44
VC++6.0编译 C语言

#include "stdafx.h"
#include "string.h"

int main(int argc, char* argv[])
{
int a,b,c=0,z[100];
char x[100],y[100],m[100];
scanf("%s %s",x,y);
a=strlen(x),b=strlen(y);
for(int j=0;j<b;j++)//区分y中哪些含?哪些不含?
{
z[j]=1;
if('?'==y[j])z[j]=j;
}
for(int i=0;i<=a-b;i++)
{
for(int k=0;k<b;k++)
{
if(z[k]!=1)y[k]=x[i+k];//让y中含?的地址的值等于x中相应的那个值
m[k]=x[i+k];//截取x得m,使m与y的长度一样
}
if(strcmp(m,y)==0)c++;
}
printf("%d",c);
return 0;
}

问题没说清楚。
如果是把y中的问号,用x中的对应单元的字符替代,可以这样写:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int a,b,c=0,z[100];
char x[100],y[100],m[100];
int i,j,k;

scanf("%s %s", &x[0],&y[0]);
a=strlen(x);
b=strlen(y);

for(j=0;j<b;j++)
{
z[j]= -1;
if (strncmp(&y[0]+j,"?",1) == 0) {
z[j]=j;
strncpy(&y[0]+j, &x[0]+j,1);
};
}
printf("%s ",y);
}

输入:
1234567890 abc?ef?h
输出:
abc4ef7h

如果要截取某一长度,只要让y[长度]这个单元为 "\0" -- 字符串结束符就可以了。

告诉一下你到底要干什么。。。程序有点没看明白