/* в функцию передаются указатели на начало исходной строки (*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).
Постановка задачи : Дана строка, в которой по мима все возможных букв и символов, встречается набор символов, который обозначает код символа (принятое в Си обозначение символа). Наша задача заменить этот код на символ, который ему соответствует.
нет да
|
Описание алгоритма: В функцию передается два указателя, на начало исходной строки и на начало результирующей. Для то го что бы организовать цикл по всей длине строки, определяем количество символов в этой строчке. Если встречается символ «\», а за ни идет цифра, это начало кода символа, считывается все цифры идущие за слешем. Затем преобразуются из восьмеричной системы счисления в десятичную и в результирующую строку записывается символ, чей код был прочтен. В программе рассмотрены варианты, что в строке могут быть любые символы, в том числе кавычки, буквы. Также может быть набор символов такого вида: «\\\\\\\\\\\\\\\», если за последним слешем не стоит цифра, то данная комбинация рассматривается как набор символов и в таком же виде записывается без изменения. Если после слеша стоит цифра, то последний слеш и следующие за ним цифры рассматриваются как код символа.
#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); //вызываем функцию преобразования из восьмеричной системы
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.