Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Контекстная замена





Контекстная замена -поиск и замена в строке фрагментов, заданных одной строкой (контекста) на фрагмент, заданный другой, например:

Исходная строка Заменяемая Заменяющая Результат

строка строка

"abc234pe4234e" "234" "_00_" "abc_00_pe4_00_e"

 

Особенность программы: обработка строки производится не путем ее переписывания, а с помощью сдвига “хвоста” строки вправо или влево. Ввиду сложности алгоритма приведем его в пошаговой детализации.

Шаг 1: Исходные данные и результат. Строки заданы массивами символов s,s1,s2. Результирующая строка размещается в том же массиве, что и исходная. Контроль размерности не производится:

void Context(char s[], char s1[], char s2[]) {...}

 

Шаг 2: Основной цикл программы состоит в посимвольной проверке строки на вхождение в нее подстроки, начиная с текущего символа. В случае вхождения производится замена:

void Context(char s[], char s1[], char s2[])

{

int n;

for (n=0; s[n]!='\0'; n++)

{

// Если начиная с n-го символа расположена

// подстрока s1, заменить ее на s2 в строке

}

}

Шаг 3: Проверка утверждения, что начиная с n-го символа в строке s расположена подстрока s2:

int i;

for (i=0; s[n+i]!='\0' && s1[i]!='\0'; i++)

if (s[n+i]!= s1[i]) break;

if (s1[n+i]=='\0')

{

// заменить s1 на s2 в строке, начиная с s[n]

}

 

Шаг 4: Замена подстроки s1 на s2, начиная с n-го символа строки s, заключается перемещении "хвоста" строки s вправо или влево в зависимости от знака разности длин строк и в переписывании строки s2 на место строки s1. Для получения длины строки воспользуемся стандартной функцией strlen:

int l2,dd,k;

l2 = strlen(s2)

dd = l2 - strlen(s1);

if (dd!= 0)

{

// сдвинуть "хвост" строки s на dd символов

}

for (k = 0; k < l2; k++)

s[n+k] = s2[k];

 

Шаг 5: Для сдвига всего "хвоста" (для простоты, начиная с n-го символа) влево (dd < 0) необходимо все символы, начиная с n+dd перенести на dd позиций влево. Для перемещения вправо нужно сначала найти конец строки, чтобы от него производить перемещения символов с убывающим индексом

if (dd < 0)

{

for (k=n; s[k+dd]!='\0'; k++)

s[k] = s[k+dd];

s[k]='\0';

}

else

{

for (k=n; s[k]!='\0'; k++);

for (; k!= n; k--)

s[k+dd] = s[k];

}

 

Примечание: в случае удачной замены проверка возможности последующей замены производится, начиная со следующего символа. Тогда при наличии замен вида "nnn" на "nnnn..." программа будет расширять строку до бесконечности.

Date: 2015-11-13; view: 1067; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию