Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- int replace(char * str, const char * substr, const char * repstr);
- int pos(const char * str, const char * substr, int begin);
- int main(){
- char a[256] = "ABCABCABCABCABC";
- char b[] = "ABC";
- char c[] = "DEFGH";
- printf("a = \"%s\"\n", a);
- printf("b = \"%s\"\n", b);
- printf("c = \"%s\"\n", c);
- // В строке a заменим все вхождения строки b на строку c:
- printf("Replace in a all from b to c:\n");
- int count = replace(a, b, c);
- printf("a = \"%s\"\n", a);
- printf("strlen(a) = %d\n", strlen(a));
- printf("count = %d\n", count);
- return 0;
- }
- int replace(char * str, const char * substr, const char * repstr){
- // Функция заменяет все вхождения строки substr в строку str на строку repstr
- // Возвращает количество замен
- char buffer[4096]; // Используем buffer для копирования символов
- int p = -1, i, j, k, count;
- int len = strlen(str); // Длина строки
- int sublen = strlen(substr); // Длина подстроки
- count = i = j = k = 0; // Необходимые счетчики: j для buffer, i для str, k для repstr
- while ((p = pos(str, substr, p+1)) > -1){ // Пока есть еще вхождения подстроки
- while (i < p) buffer[j++] = str[i++]; // Копируем часть до позиции вхождения
- i += sublen; // Перепрыгиваем всю подстроку
- while((buffer[j++] = repstr[k++]) != '\0'); // На место подстроки копируем строку, которой мы заменяем
- j--; // Случайно скопировали символ окончания строки, не беда, вернемся на одну позицию влево
- k = 0; // Обнуляем счетчик по repstr для повторного копирования
- count++; // Увеличиваем количество сделанных замен
- }
- // Копируем оставшуюся часть строки
- while (i < len) buffer[j++] = str[i++];
- // Ставим символ окончания строки
- buffer[j] = '\0';
- // Теперь из buffer все копируем обратно в str
- i = j = 0;
- while ((str[i++] = buffer[j++]) != '\0');
- return count;
- }
- int pos(const char * str, const char * substr, int begin){
- // Функция ищет первое вхождение подстроки substr в строку str начиная с позиции begin
- // Если нашла, то возвращает эту позицию, иначе возвращает -1
- int i, j;
- int len = strlen(str); // Длина строки, в которой необходимо найти подстроку
- int sublen = strlen(substr); // Длина подстроки (которую необходимо найти)
- for(i = begin, j = 0; i < len; i++)
- if (str[i] == substr[j]){
- j++;
- if (j == sublen)
- return (i-j+1);
- } else if (j != 0){
- j = 0;
- i--;
- }
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement