Waitrud Weber’s blog

things and reminders for memories

Code Analyzer: String function 003: m_replace

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