for(i=0;i<n;i++) /* Поиск символов строки из диапазона */
for(p='k'; p<='t'; p++)
if(st[i] == p)
{ uk=(char*)realloc(uk,(k+1)*sizeof(char)); uk[k]=st[i];
strupr(uk); k++;
}
for(i=0;i<k-1;i++) /* Упорядочивание адресов букв в соответствии с алфавитным порядком букв */
for(j=i+1;j<k;j++)
if(((int)uk[i])>((int)uk[j])) { help=uk[i]; uk[i]=uk[j]; uk[j]=help; }
printf("\n Result :\n");
for(i=0;i<k;i++) printf(" %c",uk[i]); free(uk); free(st);
}
Поиск символов в строке осуществляется с использованием функций strchr(), strrchr(), strstr(), strpbrk().
Функция char * strchr(constchar * str, intsim) определяет первое местоположение символа sim в строке с адресом str. Возвращаемым значением является адрес, по которому символ sim обнаружен при поиске в данной строке, начиная с адреса str, или NULL, если символ отсутствует. Нулевой символ, завершающий строку, также входит в число проверяемых символов.
Аналогично функция char * strrchr(constchar * str, intsim) определяет адрес последнего вхождения символа sim в строку с адресом str.
Функция char * strstr (constchar * str_1, constchar * str_2) определяет первое вхождение строки с адресом str_2 в строку с адресом str_1. Возвращаемым значением является адрес, по которому первый символ строки с адресом str_2 записан в строке с адресом str_1. Возвращаемым значением является NULL, если вторая строка не встречается в первой.
Функция char * strpbrk(constchar * str_1, constchar * str_2) определяет первое вхождение любого символа из строки с адресом str_2 в строку с адресом str_1. Возвращаемым значением является адрес, по которому указанный символ обнаружен при поиске в строке, начиная с ее адреса. Если ни один символ второй строки не встречается в первой, функция возвращает NULL. После выполнения фрагмента программы
сhar * ptr; ptr = strpbrk(“Это тест!”, “есою”); printf(“%s”,ptr); –
на экране появятся символы: “о тест!”.
Любая из функций strchr(), strrchr(), strstr(), strpbrk() при одном вызове обнаружит только одно вхождение заданного символа (заданной строки) в анализируемую строку. Если ставится задача обнаружения всех вхождений, то необходимы многократные вызовы соответствующих функций. При этом следует «продвигать» указатель на следующую позицию с целью избежания зацикливания программы.
КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ
1. Переписать программу из примера 6.1 с использованием функций scanf(), gets(), getchar(), getc(), getch() вместо функции getche().
2. С использованием функции realloc() ввести с клавиатуры несколько строк, с одновременным выделением памяти для очередной строки.
3. Какие из операторов могут быть написаны синтаксически верно и в каких случаях? Как должны быть объявлены (и инициализированы) соответствующие переменные ?
K = strlen(ptr[j]);
L = atoi(St);
strstr(S+j,F);
4. Что будет на экране после выполнения программы
#include <stdio.h>
#include <string.h>
void main (void)
{char str1[] = "asdfFSSFKhg", str2[]="AEF", * ptr;
ptr=strupr(str1);
while ((ptr = strpbrk(ptr,str2))!=NULL)
{printf("\n %c - %d",*ptr,(int)(ptr-str1));
ptr++;
}
}
5. Что будет на экране после выполнения программы?
Найти и исправить некорректность в программе.
#include <stdio.h>
#include <string.h>
char * fun (int * j, char *D , char g)
{ if (g=='d')
{*++D='a'; printf ("\nfun:D = %s", D++); return D;}
g= 'T'; *(++D + 4+ (++(*j))) = 'V'; return D;
}
void main (void)
{char tt[]={'d','h','f','k','l'}, s[]="comprehension";
char * g=s, *h=tt; int i=0;
for (; *g; i=strlen(g),i++) *++h=*g++;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.