Теоретические сведения. Для работы со строками используются библиотечные функции, прототипы которых находятся в заголовочных файлах stdlib.h и string.h.
Для работы со строками используются библиотечные функции, прототипы которых находятся в заголовочных файлах stdlib.h и string.h.
В программах взависимости от типа вызовы функций для работы со строками задаются в виде:
ИмяФ(СписокАргументов);
или
ИмяПерем=ИмяФ(СписокАргументов);
где ИмяФ – имя функции;
СписокАргументов – список аргументов, передаваемых в тело функции;
ИмяПерем – идентификатор соответствующего типа.
Например:
y=strlen(st);
/*объекту y присвоить значение длины строки st*/
При использовании библиотечных функций следует учитывать некоторые особенности их выполнения и представления символьных данных в памяти.
· Функции, работающие с регистрами, распространяются только на латиницу.
· В С++ некоторые параметры функций обработки символов принадлежат типу int (unsigned), поэтому, если число станет больше 128 (255), функция будет работать с ошибкой.
· Перед первым обращением к строке она должна быть объявлена и проинициализирована. Во многих случаях пустую строку необходимо бывает задать в качестве начального значения строки. Такую инициализацию можно выполнить с помощью вызова функции strcpy(s, " ");, но более эффективным будет присваивание *s=0;.
· Функции копирования (кроме strncpy) не проверяют длину строки. Размер строки-приемника должен быть больше, чем размер источника на 1 символ (для символа ’\0’).
При вызове функции strncpy следует помнить, что, если длина копируемой строки превосходит параметр kol, то строка-получатель не будет завершена символом ’\0’. В этом случае такой символ надо дописывать в конец строки вручную.
Функции для работы со строками – файл stdlib.h |
| Функции для работы со строками – файл string.h |
|
Продолжение |
|
Пример 1.
//Программа демонстрирует работу функций из файла stdlib.h
#include <stdio.h>
#include <stdlib.h>
void main(){
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=atof(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));
}
Пример 2.
//Программа демонстрирует работу функций из файла string.h
#include <stdio.h>
#include <string.h>
void main(){
char st[100],sp[100],str[100],
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'));
}
Пример 3.
//Поиск множества неповторяющихся символов строки
#include <stdio.h>
#include <string.h>
void main(){
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]);
}
}
Пример 4.
/*Удаление лишних левых и внутренних пробелов в строке при выводе*/
#include <stdio.h>
#include <string.h>
void main(){
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]); //если рядом два пробела
}
Задания
1.Наберите коды программ из Примеров 1 и 2. Выполните компиляцию и запуск программ.
2.Дана строка, в которой слова разделены одним пробелом. Замените первые буквы всех слов на заглавные (если слово начинается с заглавной буквы, оставьте без изменения).
3.Дана строка, в которой слова разделены одним пробелом. Подсчитайте, сколько букв 'w' встречается в каждом слове.
Домашние задания
1.Наберите коды программ из Примера 3 и 4. Выполните компиляцию и запуск программ.
2.Дана строка, в которой слова разделены одним пробелом. Подсчитайте, сколько в каждом слове букв, совпадающих с его первой буквой.
3.Дана строка. Преобразуйте ее так, чтобы сначала следовали цифровые символы, а затем все остальные. Порядок следования символов между собой не изменять.
Дата добавления: 2015-02-16; просмотров: 959;