Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функции для работы со строками.⇐ ПредыдущаяСтр 11 из 11
Для работы со строками в языке С есть специальные функции, которые описаны в библиотечном файле string.h. Наиболее часто используются следующие функции. 1. size_t strlen (char *str) - определяет длину строки и возвращает количество символов без нулевого символа. Например: k =strlen(s);
2. char * strcat (char *s1, const char *s2) - производит соединение двух строковых переменных s1 и s2, при этом s2 присоединяется в конец s1. Возвращает s1 Например: char str1 [10 ]=”весна ”; *str2 = “лето”; strcat(str 1,str2); str1 =весна лето
3. char* strncat (char*s1, char*s2, size_t n)– соединяет n литер из строки s2 с s1.
4. int strcmp(char *sl, char *s2) производит сравнение двух строк s1 и s2. При сравнении происходит посимвольное вычитание кодов символов. Сравнение выполняется до первого появления неравных символов. Возвращает в качестве результата сравнения целую величину: < 0 когда sl меньше, чем s2; = 0 когда sl равна s2; > 0 когда sl больше, чем s2. Например: strcmp(“AAA”,”AAA”) 0 strcmp(“AAB”,”AAA”) 1 strcmp(“AAA”,”AAB”) -1 Например: int n; char s[]="abc"; char *tt="abf"; n=strcmp(s,tt); printf(" %d",n); n -3
5. int strncmp (char*sl, char*s2, size_t n) - производит сравнение n начальных символов двух строк s1 и s2.
6. int stricmp (char *sl, char *s2) - выполняет сравнение двух строк, не учитывая регистра символов.
7.int strnicmp (char*sl, char*s2, size_t n)- сравнивает первые n символов строк sl и s2, не делая различия в регистре символов.
8. char* strrev (char *str)-обращает порядок символов в строке str Например: char str[] = "март"; strrev(str);
str "трам"
9. char* strcpy (char *s1, char *s2) - выполняет копирование строки s2 в строку s1 и возвращает строку s1. Пример char s[]="баркас"; char *tt; strcpy(tt,s); printf("%s",tt); tt баркас
10.char * strncpy (char*s1, char*s2, size_t n)- выполняет копирование n символов строки s2 в строку s1 и возвращает строку s1.
11.char* strchr (char *str, int c)- находит первое вхождение символа c в строку str и возвращает указатель на первый встреченный в строке символ c. Если такого символа в строке не оказалось, возвращает NULL. Например: char *tt="аудитория 8.712"; char *p; p=strchr(tt,'8'); printf(" \n %u ", p);
пусть адрес tt - …150 p - …160
12. char* strrchr (char *str, int c) - возвращает указатель на последний встреченный в строке s символ с.
13. char* strstr (char*str, char*s)- ищет в строке str первое вхождение подстроки s и возвращает указатель на первый символ найденной в строке str подстроки s. Если строка s не обнаружена в строке str, функция возвращает NULL. Например: char *tt="abc def ijk lmn"; char *p; p=strstr(tt,"def"); printf(" \n tt= %u p= %u ",tt, p); адрес tt = … 170 p = … 174 14.char* strpbrk (char* str, char *pat)- просматривает строку и определяет первое вхождение любого символа из образца, т.е. ищет в строке str первое вхождение любого символа из образца pat. Если символы из образца не содержатся в строке, функция возвращает NULL. Например: void main() { char *a="abc1234.,"; char *p="bd1"; char *rez; printf(" \na=%d ",a); printf(" \np=%d ",p); rez=strpbrk(a,p); printf(" \n rez=%d ",rez); } адрес a=…170 адрес p=…180 адрес rez=…171
15. char* strtok (char* s1, char* z)- разбивает строку на отдельные лексемы, разделенные знаками строки z.
Пример 7.1 В качестве примера рассмотрим несколько простых задач по обработке строковых данных. Одна из строковых переменных описана как массив символов (char t[160]), а вторая с помощью указателя на символьный тип как строку (char *tt). При решении задач используется индексное обращение к каждому символу строки.
void main() {int i,j,l,n=0; char t[160]=" фирма выполняет ремонт компьютеров"; char *tt=" все аудитории у это время заняты"; /* 1 */ Посчитать количество букв м l=strlen(t); for(i=0;i<l;i++) if(t[i]=='м') n++; printf("%d\n",n);
/*2 */ Заменить м на + for(i=0;i<l;i++) if(t[i]=='м') t[i]='+'; printf("%s\n",t);
/*3*/ Уставить перед м + for(i=0;i<=l;i++) if(t[i]=='м') {for(j=l;j>i;j--) t[j]=t[j-1]; t[i]='+';i=i+1;} puts(t);
/*4*/ Посчитать количество букв м n=0; for(i=0;i<l;i++) if(*(tt+i)=='м') n++; printf("%d\n",n);
/*5*/ Удалить буквы м l=strlen(tt); for(i=l-1;i>=0;i--) {if(*(tt+i)=='м') {for(j=i;j<l-1;j++) *(tt+j)=*(tt+j+1);}}; puts(tt); Пример 7.2 Задана строка. Предполагается, что в ней могут быть подряд идущие одинаковые символы. Удалить их, оставив по одному из таких символов. void main() { int i,n=0,j,k,l; char f[30]; printf("Введите строку "); gets(f); \\Ввод строки printf("%s",f); \\вывод исходной строки на экран l=strlen(f);\\ определение длины сроки for(j=l-1;j>=0;j--) if(f[j]==f[j+1])\\ сравнение двух соседних символов
{ n++;\\подсчет количества удаленных символов for(k=j; k<l-1;k++) f[k]=f[k+1];\\удаление символа } i=l-n; f[i]='\0';\\завершение строки printf("\nn=%d \nstr=%s",n,f); } Пример 7.3 Задана строка. Найти самое длинное слово и заменить его *.
void main() { int i,l,ksl,nsl,max=0,dlsl, nmax,kmax; char *a="текст исходной строки"; printf("исходная строка= %s\n",a); nsl=0; l=strlen(a); for(i=0; i<l; i++) if (a[i]==' ') { ksl=i-1; dlsl=ksl-nsl+1; if (dlsl>max) {max=dlsl;nmax=nsl; kmax=ksl;} nsl=i+1; } printf("нач_символ= %d кон_символ=%d длина=%d\n", nmax, kmax,max); printf("\слово= "); for(i=nmax; i<=kmax; i++) printf("%c",a[i]); for(i=nmax; i<=kmax; i++) a[i]='*'; printf("\n результирующая строка= %s\n",a); getch(); } Пример 7.3 Задана строка. Определить количество пробелов. void main() { int n=0; char *b="программа не должна содержать ошибок"; char *p;\\дополнительный указатель p=b; \\p указывает на туже строку, что и b p=strchr(p,' ');\\определение положения первого пробела while(p)\\ цикл до конца строки { p++;\\ смещение указателя на одну позицию n++;\\подсчет количества пробелов p=strchr(p,' '); } printf(" \n\nn= %d \n",n); }
Пример7.4 Задана строка. Предполагается, что в ней слова могут быть разделены пробелами, запятыми или точками. Разбить текст на слова и пронумеровать слова.
int main(void) { char *input="Весна. Солнце греет, временами дождь."; char *p;//дополнительный указатель char *z=",.";//строка с возможными разделителями int k=1; p = strtok(input, z);//выделение первого слова if (p) printf("%d %s\n",k, p); do// цикл до конца строки { p = strtok(NULL, z);// выделение очередного слова if (p) { k++; printf("%d %s\n",k, p);} } while(p); getch(); } Пример 7.5 Заданы элементы массива действительных чисел (в примере их 3). Преобразовать в строковые переменные элементы массива и их индексы. Вывести на печать строковые переменные.
РАБОТА С ФАЙЛАМИ ДАННЫХ Этапы использования файлов ü Описание указателя на файл. ü Открытие файла. ü Чтение или запись данных. ü Закрытие файла. ü Вспомогательные действия: проверка конца файла, проверка наличия ошибки и т.п. Описание указателя на файл. Производится обязательно до открытия файла. FILE *pf1, *pf2,…; stdio.h Например FILE * fin, * fout;
Открытие файла pf = fopen (“имя файла”,”режим”); где pf - описанный ранее указатель на файл; fopen - функция открытия файла; “имя файла” - “post.dat”, “ c:\work\sap.dat” ”режим” “r” – открытие файла для чтения; “w” – для записи; “a” – для дозаписи; “+” – добавка “r+” – чтение с последующей записью; “b” – добавка к основному режиму, указывает, что файл содержит Например fin = fopen(“form.txt”,” r”); fout = fopen (“rez.dat”,”w”); Запись/чтение данных. Запись данных в файл fprintf(pf,“управляющая строка”,”список вывода”); Например fprintf(fin, “%4d %6.2f \n”, k,p); Чтение данных из файла fscanf(pf,“управляющая строка”,”список адресов”); Например fscanf(fin,“ %f %f %d”, &q, &t, &m); Закрытие файла. fclose(указатель файла); Например fclose(fin);
Пример 8.1 Занести в файл 10 целых чисел. Затем считать числа из файла и вывести на экран. int main() { int i, kol; int a; FILE *pf_1;
//Занесение информации в файл pf_1 = fopen("ff1.dat", "w"); printf("введите количество элементов");
scanf("%d",&kol); printf("введите данные"); for(i=0; i<kol; i++) { scanf("%d",&a); fprintf(pf_1,"\n%d",a); } fclose(pf_1); }
,
//Считывание информации из файла
pf_1 = fopen("ff1.dat", "r"); for(i=0; i<kol; i++) { fscanf(pf_1,"%d",&a); printf(" %4d",a);} fclose(pf_1); return 0; }
Проверка конца файла. feof(указатель файла) признак Если признак = =0, то конец файла не достигнут. Если признак ≠ 0, то достигнут конец файла(eof): while(! feof (fin)) { ... } Посчитать сумму чисел во втором файле. Вывести на печать данные из второго файла. int main() { FILE *pf_1, *pf_2; int i,s=0, a, kol=8;
pf_1 = fopen("ff1.dat", "w");
for(i=0; i<kol; i++) { a=-50+random(100); printf("%5d",a); fprintf(pf_1,"\n%d",a); } fclose(pf_1); /////////////////////////////////// pf_1 = fopen("ff1.dat", "r"); pf_2 = fopen("ff2.dat", "w");
while (!feof(pf_1)) { fscanf(pf_1,"%d",&a); printf("%5d",a);
if(a>0) fprintf(pf_2,"\n%d",a); } fclose(pf_1); fclose(pf_2); ///////////////////////////////////// pf_2 = fopen("ff2.dat", "r");
printf("\n "); while (!feof(pf_2)) { fscanf(pf_2,"%d",&a); printf(" %4d ", a); s=s+a; } printf("\n summa= %5d",s); fclose(pf_2); return 0; } 8.7.Проверка наличия ошибки. Используется функция ferror(указатель файла) признак Если признак = =0 - нет ошибки Если признак!= 0 - есть ошибка. Пример: int error; if((error = ferror(fout))!=0) printf(“Ошибка при работе с файлом типа %d ”, error);
8.8 Установка указателя файла на заданное смещение fseek(указатель на файл, offset, origin);
origin SEEK_SET - Поиск с начала файл SEEK_CUR - Поиск с текущей позиции SEEK_END - Поиск с конца файла
8.9. Определение положения указателя файла
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-04-04; просмотров: 54; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.153.69 (0.16 с.) |