Разработка программного обеспечения. Функция, оставляющую в строке по одному пробелу между словами, страница 7

tmp_max = 0;     //переменная для подсчета символов

if (str1[i] == ' ') continue;  // если встретили пробел, пропускаем его, программа продолжается дальше.

for(j = 0;j < len;j ++){      //цикл, по всей длине строки

if (str1[i] == str1[j]) tmp_max ++;   //если нашли одинаковые символы, увеличиваем счетчик

}

if (max < tmp_max) {max = tmp_max; c  = str1[i];} //если максимальное, уже существующее значение

// меньше получившегося, то текущее становиться

// максимальным и запоминаем при каком символе

}

for(i = 0;i < len;i ++){                                //цикл по всей длине строка

if (str1[i] == c) str2[i] = ' ';             //если текущий символ равен чаще всего встречающемуся, заменяем

// его на пробел

else str2[i] = str1[i];                   //если нет, проста записываем его в результирующую строку как есть

}

str2[i] = '\0';                                       //дописываем в конец результирующей строки признак конца строки

return 0;

}


3.1.10. Написать функцию, выполняющую поиск подстроки в строке. Строка и подстрока заданы в массивах символов. Результат функции – указатель на начало подстроки в строке или NULL.

Постановка задачи : Дана строка, состоящая из набора символов. Задача  определить входит ли подстрока в эту строку.

Алгоритм: В функцию передаем строку(виде char массива),строку поиска, и их длины. Ищем в строке первый символ из подстроки поднимаем флаг  и запоминаем позицию, далее смотрим если все символы  подстроки совпадают  с символами основной строки, следовательно строка найдена иначе возвращаемся на запомненный на ранее запомненную позицию и продолжаем поиск заново.

Текстпрограммы

int  serch(char *array,char * search,int kol,kol_temp)

                   int pos_str;
                   j=0;
                   start=0;        //флаг статуса (поднимается если найдено начало искомой подстроки)
                   pos=-1;
                   for(i=0;i<kol;i++){    //цикл перебирает все символы в строке
                                      if(start==1){   //если первый символ совпал
                                                         if(j!=kol_temp){       //проверяем дошли или нет до 
                                                                                                                   //конца искомой подстроки 
                                                                            if(array[i]==search[j]){j++}else //считаем кол-во 
                                                                                                                                                         //совпавших символов
                                                                                                {start=0; j=0;i=pos; pos=-1;} //иначе сбрасываем флаг
                                                                            }else break;
                                      }
                        If((start==0)&&(array[i]==search[0])){start=1;j++;pos=i;} //если первый
                                                                                                    // символ совпадает с текущим поднимаем флаг
                   }
                   printf("\nPos is %d",pos);
return pos;   //возвращаем позицию найденной последовательности.
}

 



3.1.11. Написать функцию, определяющую в массиве максимальную длину последовательности расположенных подряд возрастающих значений, и возвращающую индекс ее начала.

Постановка задачи: Дан массив содержащий набор чисел типа integer . Определить в массиве максимальную длину последовательности расположенных подряд возрастающих значений, и возвратить индекс начала этой последовательности.

 Описание Алгоритма: В функцию передаётся указатель на начало  массива и кол-во элементов в этом массиве. Организуем цикл по всем элемента этого массива и если встречаем

int search(int *array,kol){
        int i;
        
        int kol;
        int cycle;
        int pos,el,el_max,pos_max;
        cycle=0;
        el_max=-1;
        pos_max=0;
        for(i=1;i<kol;i++){
               if(cycle==0){
                       if(array[i]>array[i-1]){cycle=1;pos=i-1;el=2;}