ft_strreplace.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /* ************************************************************************** */
  2. /* */
  3. /* ::: :::::::: */
  4. /* ft_strreplace.c :+: :+: :+: */
  5. /* +:+ +:+ +:+ */
  6. /* By: bchanot <bchanot@students.42.fr> +#+ +:+ +#+ */
  7. /* +#+#+#+#+#+ +#+ */
  8. /* Created: 2017/01/19 23:19:39 by bchanot #+# #+# */
  9. /* Updated: 2018/10/14 03:25:42 by bchanot ### ########.fr */
  10. /* */
  11. /* ************************************************************************** */
  12. #include "libft.h"
  13. char *ft_stristr(const char *s1, const char *s2)
  14. {
  15. size_t i;
  16. size_t j;
  17. size_t size;
  18. i = 0;
  19. size = ft_strlen(s2);
  20. if (size == 0)
  21. return ((char *)s1);
  22. while (s1[i])
  23. {
  24. if ((i && s1[i - 1] != '\\') || !i)
  25. {
  26. j = 0;
  27. while (s2[j] == s1[i + j])
  28. {
  29. if (j == size - 1)
  30. return ((char *)&s1[i]);
  31. j++;
  32. }
  33. }
  34. i++;
  35. }
  36. return (NULL);
  37. }
  38. char *ft_strreplace(const char *src, const char *var, const char *val)
  39. {
  40. char *new;
  41. size_t i;
  42. size_t j;
  43. size_t k;
  44. if (!(new = ft_strnew(ft_strlen(src) - ft_strlen(var) +
  45. ft_strlen(val) + 1)))
  46. return (NULL);
  47. i = -1;
  48. while (ft_strcmp(&src[++i], ft_stristr(src, var)))
  49. new[i] = src[i];
  50. j = -1;
  51. k = i;
  52. while (val[++j])
  53. {
  54. new[k] = val[j];
  55. k++;
  56. }
  57. i += ft_strlen(var);
  58. j = i;
  59. while (src[i])
  60. new[k++] = src[i++];
  61. return (new);
  62. }