104 :char* m_replace ( char* char_string,
105 : char* from_string, char* to_string ) {
106 : char c1, c2;
107 : int count = array_count( char_string );
108 : int a_f = array_count( from_string );
109 : int a_t = array_count( to_string );
110 : int a_c = 0;
111 : char* char_string_2 =
112 : (char *) malloc ( sizeof (char)*( count + a_t - 1 ) );
113 :
114 : int cnt_replace = 0;
115 : for ( int i = 0; i<count; i++ ) {
116 : c1 = *( char_string + i ) ;
117 : a_c = 0;
118 : for ( int j=0; j<a_f && j <count; j++ ) {
119 : c2 = *( from_string + j ) ;
120 : if ( c1 != c2 ) break;
121 : a_c++;
122 : }
123 :
124 : if ( a_c == a_f && cnt_replace == 0) {
125 : // match
126 : int to = i + a_t;
127 : for( int k=0; k<a_t; k++ ) {
128 : *( char_string_2 + i + k + cnt_replace*(a_t- a_f ) ) =
129 : *( to_string + k );
130 : }
131 : i += a_f - 1 ;
132 : cnt_replace++;
133 : } else {
134 : *( char_string_2 + i + cnt_replace*(a_t- a_f ) ) = c1;
135 : }
136 : }
137 : *( char_string_2 + count + cnt_replace*( a_t - a_f ) ) = '\0';
138 : put_memories ( char_string_2 );
139 :
140 : return char_string_2;
141 :}
https://waitrudweber.hatenablog.com/entry/2019/03/10/004908