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

Описание алгоритма: на вход функции поступает указатель на начало заданной строки. Программа  определяет какова длина заданной строки, т.е. сколько символов в ней находится. Задаются два цикла для поиска начала (первого символа) цепочек. Если начало найдено, запускается дополнительный цикл определяющий длину фрагмента (до пробела). Если фрагмент оказалась самым длинным, то запоминаем его длину и позицию первого фрагмента. Таким образом дойдя до конца заданной строчки мы получим позицию первого самого длинного фрагмента не содержащего пробелы .

программа:

int search(char *text)
{
    int i,j,ii,jj;
    int kol;                   //кол-во символов в строке
    int pos,pos_max;
    int sim,sim_max;

kol = strlen(text); // определяем длину исходной строки, кол-во символов

    
    for(i=0;i<kol;i++)printf("%c",text[i]); //печатаем входную цепочку
    printf("\n");
    sim_max=-1;
    pos=-1;
    for(i=0;i<kol;i++){               //цикл по всем символам в строки
        for(j=i+1;j<kol;j++){          //от текущего символа до конца строки
               if(text[i]==text[j]){  //сравниваем первые символы предполагаемых фрагментов
                   ii=i;jj=j;
                   pos=ii;    // запоминаем позицию первого фрагмента
                   sim=0;
                   while(text[ii]==text[jj]){  //цикл определяет max длину фрагментов 
                       if((text[ii]==' ')||(text[jj]==' '))break; //идём до пробела
                       sim++;                                //длинна цепочек
                       if(ii<kol) ii++;else break;    //пока не конец строки
                       if(jj<kol) jj++;else break;    //пока не конец строки
                   }
                   if(sim>sim_max){sim_max=sim;pos_max=pos;} //если эти фрагменты больше 
               }                      //запоминаем их
            }   }
    printf("Position %d, simbols %d \n",pos_max,sim_max);
return pos_max; // возвращаем позицию первого фрагмента
}
 

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

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

 


нет                      да

да

 
 


да

да

 

да

 

да

 
 


 


Описание алгоритма:  В функцию передается два указателя, на начало исходной строки и на начало результирующей. Для то го что бы организовать цикл по всей длине строки, определяем  количество символов в этой строчке. Рассматриваются ситуации когда, в начале строки могут стоять любые символы , в том числе и множество пробелов, они в такой же последовательности и без изменений помещаются в результирующую строку. Как только встречается точка , программа проверяет, что стоит после точке, если там стоит множество пробелов или любые символы кроме строчных букв, они без изменения записываются в результирующую строку. Как только  встречается первая строчных буква, причем не важно из русского или английского языка, она заменяется на прописную букву, а дальше все символы записываются без изменения до конца предложения. Алгоритм предусматривает вариант когда в строке нет ни одного предложения, когда одно предложение и когда несколько предложений. 

#define CHECK(c) (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) || ((c >= 'ю') && (c <= 'Ъ')) || (c == 'ё') || (c == 'Ё'))