如何审查char数组中的单词?

时间:2016-03-08 10:24:01

标签: c arrays string replace

我怎样才能在char数组中找到一个单词并用通配符(*)字符进行审查?

我试图找到第一个出现的单词,但失败了。我试过这个,但它也没有用。我是一个新手,我已经尝试了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);
}

1 个答案:

答案 0 :(得分:3)

因此,您希望使用由'*'组成的等长字符串覆盖所有出现的字符串。为此,您需要迭代地获取指向字符串出现的指针,并且还需要知道其长度以了解您必须使用多少'*'

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如果无法找到swear则会返回null,以便循环终止