КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Текст лекции
Для работы со строками используются библиотечные функции, прототипы которых находятся в заголовочных файлах stdlib.h и string.h. В программах, в зависимости от типа, вызовы функций для работы со строками задаются в виде: ИмяФ(СписокАргументов); или ИмяПерем=ИмяФ(СписокАргументов); где ИмяФ – имя функции; СписокАргументов – список аргументов, передаваемых в тело функции; ИмяПерем – идентификатор соответствующего типа. Например: y=strlen(st); /*переменной y присвоить значение длины строки st*/ При использовании библиотечных функций следует учитывать некоторые особенности их выполнения и представления символьных данных в памяти. · Функции, работающие с регистрами, распространяются только на латиницу. · В С++ некоторые параметры функций обработки символов принадлежат типу int (unsigned), поэтому, если число станет больше 128 (255), функция будет работать некорректно. · Перед первым обращением к строке она должна быть объявлена и проинициализирована. Во многих случаях в качестве начального значения строки необходимо бывает задать пустую строку. Такую инициализацию можно выполнить с помощью вызова функции strcpy(s, "");, но более эффективным будет присваивание *s=0;. Кроме того пустую строку можно инициализировать char s[10]=""; или char s[10]="\0";, но при этом размер строки должен быть задан. · Функции копирования (кроме strncpy) не проверяют длину строки. Размер строки-приемника должен быть больше, чем размер источника на 1 символ (для символа ’\0’). При вызове функции strncpy следует помнить, что, если длина копируемой строки превосходит параметр kol, то строка-получатель не будет завершена символом ’\0’. В этом случае такой символ надо дописывать в конец строки вручную.
Сравнение строк с помощью функции strcmp осуществляется побайтово в лексикографическом порядке, то есть в порядке следования соответствующих байтов строк в таблице кодировки. Именно поэтому значения элементов в строках зависят от регистра. При использовании библиотечных функций следует иметь в виду, что указатель на строку и имя массива символов указывают на адрес размещения строки в памяти. Это означает, что изменения значений элементов строки сохраняются после завершения работы функции. Чтобы не допустить изменений в строке используется указатель на константу, который не позволит модифицировать данные, хранящиеся по адресуемой области памяти. Пример 1. //Программа демонстрирует работу функций из файла stdlib.h #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]){ char sv[]="23.547", si[]="1234", sl[]="-112424", st1[15],st2[25],st3[15]; double v; int i; long l,t=457821;
v=atof(sv); printf("Преобразование строки в вещественное число = %f\n",v); i=atoi(si); printf("Преобразование строки в целое число = %d\n",i); l=atol(sl); printf("Преобразование строки в длинное целое число = %ld\n",l); printf("Преобразование длинного целого числа в строку = %s\n", ultoa(t,st1,10)); printf("Преобразование длинного целого числа в строку = %s\n", ultoa(t,st2,2)); printf("Преобразование длинного целого числа в строку = %s\n", ultoa(t,st3,16)); system("pause"); return 0; } Пример 2. //Программа демонстрирует работу функций из файла string.h #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]){ char st[50],sp[100],str[]="", si[]="qwerty", sl[]="qwerty", sw[]="qwertyu"; int len=0, sravn1, sravn2, sravn3, kol=5; printf("Введите строку: "); gets(st); len=strlen(st); printf("Длина строки = %d\n",len); printf("Конкатенация строк: %s\n",strcat(st,"12cdb")); sravn1=strcmp(si,sl); printf("Сравнение строк: %s==%s результат %d\n", si,sl,sravn1); sravn2=strcmp(si,sw); printf("Сравнение строк: %s<%s результат %d\n", si,sw,sravn2); sravn3=strcmp(sw,si); printf("Сравнение строк: %s>%s результат %d\n", sw,si,sravn3); printf("Копирование байтов: %s\n",strcpy(sp,st)); printf("Преобразование букв нижнего регистра в верхний: %s\n", strupr(st)); printf("Преобразование букв верхнего регистра в нижний: %s\n", strlwr(st)); printf("Копирование %d символов в другую строку: %s\n", kol,strncpy(str,st,kol)); printf("Поиск в строке первого появления символа из другой строки: %s\n",strpbrk(st,si)); printf("Поиск в строке последнее вхождение заданного символа: %s\n",strrchr(st,'t')); system("pause"); return 0; }
Пример 3. //Поиск множества неповторяющихся символов строки #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]){ char st[80]; int i,j,flag,len; printf("Введите строку: "); gets(st); len=strlen(st); //длина строки printf("Неповторяющиеся символы строки образуют множество: "); for (i=0;i<len;i++){ flag=0; //флаг проверки на совпадение for (j=0;j<i;j++) //сравнение символа с предыдущими if (st[i]==st[j]) flag=1; if (flag==0)printf("%c",st[i]); } system("pause"); return 0; }
Пример 4. /*Удаление лишних левых и внутренних пробелов в строке при выводе*/ #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]){ char st[80]; int i=0,len; printf("Введите строку: "); gets(st); len=strlen(st);//длина строки printf("Преобразованная строка: "); //Удалены лишние пробелы слева while (st[i++]==' '); //Удалены лишние пробелы внутри строки for (--i;i<len;i++) if ((st[i]!=' ')||(st[i+1]!=' ')) printf("%c",st[i]); //если рядом два пробела system("pause"); return 0; }
Дата добавления: 2014-01-03; Просмотров: 399; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |