c - 在子字符串的每个实例中添加一个字符

标签 c string

在我的以下代码中,我在给定字符串中的第一个“foo”之后添加了“d”。我怎样才能对“foo”的其他实例做同样的事情? 任何帮助表示赞赏。

相关代码:

 #include<stdio.h>
 #include<string.h>
 #include<stdlib.h>

 void main()
 {
    char haystack[20]="foofoofoofoo",*ptr=haystack,*temp=NULL,*temp1=NULL,needle[]="foo";
    int position,length=strlen(needle);

    ptr=strstr(haystack,needle);

    if(ptr!=NULL)
    {       
            temp=(char *)calloc(strlen(haystack)+100,sizeof(char));
            position=(strstr(haystack,needle)-haystack);
            strncpy(temp,haystack,position+length);
            strcat(temp,"d");
            strcat(temp,strstr(haystack,needle)+length);
            strcpy(haystack,temp);
            ptr+=length;
    }       
   printf("\n%s",haystack);  
 }

最佳答案

正如 Grantly 所建议的,如果过一段时间你就必须改变自己。

但是:

  • 您还应该在循环外部分配 temp
  • 您应该释放已分配的内容
  • 你应该搜索你停止的地方,而不是从头开始

它可以给出:

 #include<stdio.h>
 #include<string.h>
 #include<stdlib.h>

 void main()
 {
    char haystack[20]="foofoofoofoo",*ptr=haystack,*temp=NULL,*temp1=NULL,needle[]="foo";
    int position,length=strlen(needle);

    temp=(char *)calloc(strlen(haystack)+100,sizeof(char));


    while(*ptr != '\0')
    {       
            ptr=strstr(ptr,needle);
            if (ptr == NULL) break;
            position=ptr-haystack;
            strncpy(temp,haystack,position+length);
            temp[position + length] = '\0';
            strcat(temp,"d");
            strcat(temp,ptr+length);
            strcpy(haystack,temp);
            ptr+=length + 1;
    }       
   printf("\n%s",haystack);  

   free (temp);
 }

输出符合预期:foodfoodfoodfood

关于c - 在子字符串的每个实例中添加一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26818526/

相关文章:

Python十进制到字符串

javascript - JavaScript replace()方法美元符号

c - 取消引用指向链表上不完整类型的指针

c++ - 有人可以解释一下这个冒号#语法吗

c - 不知道如何分配 $$ token 的值

无法在连接到服务器的多个客户端之间发送信息

c - 为什么内部 Lua 字符串会这样存储?

C# - 从另一个字符串中删除第一次出现的子字符串的最简单方法

c - ISO C90 禁止可变长度数组

java - 为什么这不起作用字符串 a = "\u"+ "30A0";?