//счисления в десятеричную
str2[i2 ++] = d;
str2[i2 ++] = str1[i1];
} else {str2[i2 ++] = str1[i1 - 1];str2[i2 ++] = str1[i1];} //если после «\» идет не цифра, а любой другой
//символ, то записываем в результирующую
// строку и «\» и идущий за ним символ
} else str2[i2 ++] = str1[i1]; // если встретили любые символы кроме «\», записываем их в
//результирующую строку без изменения
}
str2[i2] = '\0'; // записываем в конец результирующей строки символ конца строки
return 0;
}
/*функция преобразующая число из восьмеричной системы счисления в десятеричную*/
int make_int(int d){ //в функцию передается число в восьмеричной системе счисления
int tmp = 0;
int c, w = 1;
while(d != 0){ // делаем преобразования пока число не станет равным нулю
c = d % 10; //выделяем цифру и умножаем на w, а w – это степень восьмерки
tmp += c * w;
w *= 8;
d /= 10;
}
return tmp; //возвращаем преобразованное число
}
3.1.7. Написать функцию, выполняющую поиск слова в строке, начинающегося с самой младшей латинской буквы, и возвращающую указатель на его начало.
Постановка задачи : Дана строка, состоящая из набора слов, слова разделены пробелами, слова составлены из любых символов. Наша задача, найти слово начинающиеся с самой младшей латинской буквы (a – является самой младшей, z – самой старшей) и вернуть указатель на начало этого слова. Если таких слов несколько, то возвращаем указатель на последнее в строке.
да
да
да
Описание алгоритма: В функцию передается указатель на начало заданной строки. Определяем длину исходной строки, то есть количество символов. Так как в строке могут содержаться не только латинские буквы, но и любые другие символы, пробегаем всю строку, до тех пор пока не встретим латинскую букву. Запоминаем код прописной латинской буквы и считаем, что на данный момент, она является младшей. Так как в строке могут встречаться и строчные и прописные буквы, для удобства реализации задачи при сравнении код буквы берется прописной. То есть если буква была прописной, то код остается такой же, а если буква была строчная, то ее код преобразуется в код прописной буквы и именно он и будет сравниваться с другими латинскими буквами, сама буква при этом не меняется. Если в строке встречается несколько слов начинающихся с одной буквы и эта буква окажется младшей, возвращается указатель на последнее слова в строке.
программа:
#define CHECK(c) (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')))
#define MAL(c) ((c >='a') && (c<='z'))
/*в функцию передается указатель на начало заданной строки*/
char* func(char *str1){
int i, len;
char min, tmp;
char *str2;
len = strlen(str1); // определяем длину заданной строки, т.е. количество символов
while((!CHECK(*str1)) && (*str1 != '\0')) // пропускаем все символы не являющиеся буквами латинского
str1 ++; // алфавита
min = (MAL(*str1)) ? (*str1 - 32) : *str1; //встретили первую латинскую букву, запоминаем код прописной
// буквы, так как в предложении могут быть как строчные так и
// прописные буквы, для удобства сравнения пользуемся кодами
// прописных букв
str2 = str1;
for (;*str1 != '\0';str1 ++){ //цикл, до конца строчке
if (*str1 == ' '){ //если встретили пробел
while((!CHECK(*str1)) && (*str1 != '\0')) //а за пробелам следует символ, не являющийся буквой
str1 ++; // латинского алфавита, пропускаем его
if (*str1 != '\0'){ //если не дошли до конца строки
tmp = (MAL(*str1)) ? (*str1 - 32) : *str1; //сравниваем текущую букву с ранее записанной
if (min >= tmp) { //если она младшей или равна, то запоминаем ее
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.