C 在字符串中搜索子字符串

C 在字符串中搜索子字符串,c,string,C,String,编写一个程序,在给定字符串中查找指定模式的所有实例并替换 用另一根绳子把它们捆起来。将显示基本字符串、搜索模式和替换字符串 由用户提供。我写了这样的程序,但有点问题,我不明白是什么 #定义尺寸80 无效新闻事件(字符a[],字符b[],字符c[],整数n,整数k); 无效数组(int f,int s,int g,char buff[],char b[],char c[],int n,int k); int main() { 字符a[SIZE],b[SIZE],c[SIZE]; int k; pr

编写一个程序,在给定字符串中查找指定模式的所有实例并替换 用另一根绳子把它们捆起来。将显示基本字符串、搜索模式和替换字符串 由用户提供。我写了这样的程序,但有点问题,我不明白是什么

#定义尺寸80
无效新闻事件(字符a[],字符b[],字符c[],整数n,整数k);
无效数组(int f,int s,int g,char buff[],char b[],char c[],int n,int k);
int main()
{
字符a[SIZE],b[SIZE],c[SIZE];
int k;
printf(“输入句子:”);
获得(a);
printf(“\n输入要替换的单词:”;
scanf(“%s”,b);
printf(“\n输入新单词:”);
scanf(“%s”,c);
int n=0;
字符*温度;
温度=a;
while((temp=strstrstr(temp,b))!=NULL){
n++;
temp++;
k=strstr(温度,b)-b;
}
printf(“单词出现了%d次”,n);
新闻事件(a、b、c、n、k);
}
无效新闻事件(字符a[],字符b[],字符c[],整数n,整数k)
{
int f,s,g;
半焦;
f=斯特伦(a);
s=strlen(b);
g=strlen(c);
strcpy(浅黄色,a);
阵列(f,s,g,buff,b,c,n,k);
}
无效数组(int f,int s,int g,char buff[],char b[],char c[],int n,int k)
{
int i,j;
int-q;
q=k+s-1;

对于(j=0;k希望以下函数帮助您替换首次出现的

void str_find_replace(char *str, char *find, char *replace)
{
    size_t find_len,replace_len;
    char *str_end;

    find_len = strlen(find);
    replace_len = strlen(replace);
    str_end = strlen(str);

    while(*str){
        if(!strncmp(str,find,find_len) {
            memmove(str+replace_len,str+find_len, str_end - (str + find_len) + 1);
            memcpy(str,replace,replace_len);
            return;
        }
        str++;
    }
}
如果要替换所有引用,请使用以下函数

void str_find_replace(char *str, char *find, char *replace)
{
    size_t find_len,replace_len;
    char *str_end;

    find_len = strlen(find);
    replace_len = strlen(replace);
    str_end = strlen(str);

    while(*str){
        if(!strncmp(str,find,find_len) {
            memmove(str+replace_len,str+find_len, str_end - (str + find_len) + 1);
            memcpy(str,replace,replace_len);
            str += replace_len;
            str_end = str + strlen(str);
            continue;
        }
        str++;
    }
}

为什么将strlen的结果除以另一个?这段代码实际上编译时没有警告吗,例如
buff
似乎定义错误,应该会产生错误。@SamiKuhmonen似乎发现了类似于
#define count(a)sizeof(a)/sizeof(a[0])的东西
如果a是一个任意项目的数组,并试图在“字符串”上下文中使用它(但方式错误),那会有什么帮助呢?不幸的是,还有很多其他问题。代码显示了很多缺陷和错误。要解决这一问题,我建议分而治之。(1)将程序分成小块,用一个简单的main调用程序中的每个块,这个main使用指定的参数调用程序。这非常有帮助,因为你必须考虑参数。此外,你可以看到它是如何工作的。(2)使用描述性变量名。这可以提高可读性,但也可以让您考虑您的意图。好的,非常感谢
void str_find_replace(char *str, char *find, char *replace)
{
    size_t find_len,replace_len;
    char *str_end;

    find_len = strlen(find);
    replace_len = strlen(replace);
    str_end = strlen(str);

    while(*str){
        if(!strncmp(str,find,find_len) {
            memmove(str+replace_len,str+find_len, str_end - (str + find_len) + 1);
            memcpy(str,replace,replace_len);
            return;
        }
        str++;
    }
}
void str_find_replace(char *str, char *find, char *replace)
{
    size_t find_len,replace_len;
    char *str_end;

    find_len = strlen(find);
    replace_len = strlen(replace);
    str_end = strlen(str);

    while(*str){
        if(!strncmp(str,find,find_len) {
            memmove(str+replace_len,str+find_len, str_end - (str + find_len) + 1);
            memcpy(str,replace,replace_len);
            str += replace_len;
            str_end = str + strlen(str);
            continue;
        }
        str++;
    }
}