Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функции для работы со строками.Содержание книги
Поиск на нашем сайте Для работы со строками в языке С есть специальные функции, которые описаны в библиотечном файле 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 = “лето”;
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. Например:
Например: int n; char s[]="abc"; char *tt="abf"; n=strcmp(s,tt);
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);
9. char* strcpy (char *s1, char *s2) - выполняет копирование строки s2 в строку s1 и возвращает строку s1. Пример char s[]="баркас"; char *tt; strcpy(tt,s); printf("%s",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; }
Проверка конца файла.
Если признак = =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.Проверка наличия ошибки.
Если признак = =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. Определение положения указателя файла ftell(указатель на файл);
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2021-04-04; просмотров: 130; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.01 с.) |