一个用字符串中的s2替换所有s1的程序

时间:2018-11-30 06:19:28

标签: c

我发现该程序可以将字符串中的所有s1替换为s2,而且我对序列的理解也很简单
  int i = strstr(s,s1)-s?

enter code here
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char *my_replace(char *s, char *s1, char *s2)
{

    char *aux = (char *) malloc((sizeof(s) - sizeof(s1)) + sizeof(s2) + 1);
    int i = strstr(s, s1) - s, j = strlen(s1);
    strncpy(aux, s, i);
    strcat(aux, s2);
    strncat(aux, (s + i + j), (strlen(s) - i - j));
    return aux;
 }


 int main()
 {
    char *s, *s1, *s2;
    s = (char*)malloc(10);
    s1 = (char*)malloc(10);
    s2 = (char*)malloc(10);
    char *aux;
    scanf("%s%s%s", s, s1, s2);
    aux = my_replace(s, s1, s2);
    printf("%s\n", aux);
    return 0;
   }

1 个答案:

答案 0 :(得分:0)

  

..并且我不理解序列:int i = strstr(s, s1) - s

好吧,它为您提供了ss1处的偏移量。

示例:

char* s = "abcdef";
char* s1 = "cd";
printf("%d\n", strstr(s, s1) - s);

将给出结果2

这是因为strstr返回一个指向所定位子字符串开头的指针,然后通过减去字符串的开头(指针算术)来获得它们之间的偏移量。

您可以看到以下内容:

 abcdr
 ^ ^
 | | 
 | strstr(s, s1)
 |
 s