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

/* в функцию передаются указатели на начало исходной строки (*str1) и на начало результирующей (*str2)*/

int func(char *str1, char *str2){

int i;

int len, c;

len = strlen(str1);               //определяем длину заданной строки, т.е. количество символов в строке.

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

if (str1[i] == '.'){     //Если встретили точку

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

i++;                     //переходим к следующему символу

if (str1[i] == ' ') {           //если в заданной строке встретили пробел

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

while((!CHECK(str1[i])) && (str1[i] != '\0')){   // если после точке, встречаем не букву или

//символ конца строки

i ++;

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

//строку

}

if (str1[i] == 'ё') str2[i] = 'Ё';                          //если после точке встречаем букву «ё», то

//в результирующую строку записываем  «Ё»

if ((str1[i] >= 'a') && (str1[i] <= 'z')) str2[i] = str1[i] - 32; //если после точке встречаем строчную

// букву  английского языка, заменяем ее на

// прописную

if ((str1[i] >= 'ю') && (str1[i] <= 'ъ')) str2[i] = str1[i] + 32; //если после точке встречаем строчную

// букву  русского языка, заменяем ее на

// прописную

}

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

}

return 0;

}


3.1.6. Написать функцию, заменяющую в строке принятое в Си обозначение символа с заданным кодом в восьмеричной системе счисления (например, \101) на сам символ в базовой кодировке ASCII(в данном случае - A).

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

 


                                                  нет                                                           да

Блок-схема: решение: текущий символ это цифра
 


str2[i2 ++] = str1[i1]

 
                                                                                   нет                                                                            да

 


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

#define CHECK(c) ((c >= '0') && (c <= '7'))

/* в функцию передаются указатели на начало исходной строки (*str1) и на начало результирующей (*str2)*/

int func(char *str1, char *str2){

int i1, i2;

int len;

int d, c;

len = strlen(str1);     //определяем длину заданной строки, т.е. количество символов в строке.

i2 = 0;

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

if (str1[i1] == '\\'){    //если встретили символ «\»; в программе «\\» т.к. «\» является служебным символом

//и такой записью говориться, что программа сравнивает именно «\»

i1++;

if (CHECK(str1[i1])){  //если после слеша встретили цифру

d = 0;

while(CHECK(str1[i1])){ 

d = d * 10 + (str1[i1] - 48);   //преобразуем набор символов в число

i1 ++;

}

d = make_int(d);                //вызываем функцию преобразования из восьмеричной системы