C 如何检查字符数组中的单词?

C 如何检查字符数组中的单词?,c,arrays,string,replace,C,Arrays,String,Replace,如何在字符数组中查找单词并使用通配符(*)对其进行检查 我试着找到这个词的第一次出现,但失败了。我试过这个,但也没用。我是个新手,我已经试了5个小时了 int main() { int w,q; char l,m; char *arr, *swear; int i,a,t,k,z; printf("Enter a word which is not allowed."); scanf("%s", swear); printf("Now

如何在字符数组中查找单词并使用通配符(*)对其进行检查

我试着找到这个词的第一次出现,但失败了。我试过这个,但也没用。我是个新手,我已经试了5个小时了

int main()  
{
    int w,q;
    char l,m;
    char *arr, *swear;
    int i,a,t,k,z;

    printf("Enter a word which is not allowed.");
    scanf("%s", swear);
    printf("Now enter a word.");
    scanf("%s", arr);

    for(a=0; swear[a]!='\0'; ++a); //finding length of swear
    for(t=0;arr[t]!='\0';t++);    // finding length of arr

    for(i=0,k=0;k<t & i<t;i++,k++)
    {
        arr[i]=l;
        swear[k]=m;
        if(strstr(swear,arr))
            arr[i]='*';
        else
            break;
    }

    for(z=0;z<t;z++)
    {
        printf("%c",arr[z]);
    }
    return(0);
}
intmain()
{
int w,q;
字符l,m;
char*arr,*发誓;
int i,a,t,k,z;
printf(“输入一个不允许的单词”);
scanf(“%s”,发誓);
printf(“现在输入一个单词”);
scanf(“%s”,arr);
for(a=0;sware[a]!='\0';++a);//查找sware的长度
for(t=0;arr[t]!='\0';t++);//查找arr的长度

对于(i=0,k=0;k,因此您希望使用由
'*'
组成的等长字符串覆盖所有出现的字符串。为此,您需要迭代获取指向该字符串出现的指针,并且您还需要知道必须使用多少
'*'

size_t swearLength = strlen(swear); // swear is assumed null-terminated
char *here = arr;
while ((here = strstr(here, swear)) {
    memset(here, '*', swearLength);
    here += swearLength;  // to avoid searching what's already censored
}

strstr
如果找不到
sware
将返回null,因此循环将终止

这不是注释的工作方式。注释是用来解释为什么要做而不是你在做什么。最好习惯于解释为什么和不做什么。请:显示更多代码,尤其是
arr
是如何声明的。阅读相关内容。谢谢我编辑了我的答案
scanf
需要足够大的缓冲区来存储字符串,而不是悬空的指针。请尝试类似
char-arr[1024],sware[1024];
的方法,并防止
scanf
从缓冲区中写入
scanf(“%1024s”
,sware)建议,在memset行后,加上:
here+=swearLength;
没有必要重新检查你刚才写的东西。我觉得不错,你想启发一下吗?和另一个答案一样:
strstr
不是单词函数。@RadLexus要远一点,OP的代码不会这样做,他也没有要求。@Alnitak:“我怎样才能在字符数组中找到一个单词……”也就是说,这项任务本身就值得一篇简短的博士论文——而且在这之前已经被问过很多次了。看着OP的代码,我同意这远不是主要问题(即使OP花了整整“5个小时”在上面;我对具体问题的思考也远不止这些)。