Теоретические сведения. Для работы со строками используются библиотечные функции, прототипы которых находятся в заголовочных файлах 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
Краткое описание действий преобразует строку str в вещественное число типа double преобразует строку str в целое число типа int преобразует строку str в целое число типа long преобразует целое v в строку str. При изображении числа используется основание baz (2≤baz≤36). Для отрицательного числа и baz=10 первый символ «минус» (–). преобразует длинное целое v в строку str. При изображе-нии числа используется основание baz (2≤baz≤36). преобразует беззнаковое длинное целое v в строку str
Прототип double atof (const char *str); int atoi (const char *str); long atol (const char *str); char *itoa (int v, char *str, int baz); char *ltoa (long v, char *str, int baz); char *ultoa (unsigned long v, char *str, int baz);
Функция atof atoi atol itoa ltoa ultoa
Функции для работы со строками – файл string.h
Краткое описание действий приписывает строку si к строке sp (конкатенация строк) ищет в строке str первое вхождение символа с сравнивает строки str1 и str2. Результат отрицателен, если str1<str2; равен нулю, если str1==str2, и положителен, если str1>str2 (сравнение беззнаковое) копирует байты строки si в строку sp определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов строки str2 выделяет память и переносит в нее копию строки str вычисляет длину строки str преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра
Прототип char *strcat (char *sp, const char *si); char *strchr (const char *str, int c); int strcmp (const char *str1, const char *str2); char *strcpy (char *sp, const char *si); int strcspn (const char *str1, const char *str2); char *strdup (const char *str); unsigned strlen (const char *str); char *strlwr (char *str);
Функция strcat strchr strcmp strcpy strcspn strdup strlen strlwr
Продолжение
Краткое описание действий приписывает kol символов строки si к строке sp (конкатенация) сравнивает части строк str1 и str2, причем рассматрива-ются первые kol символов. Результат отрицателен, если str1<str2; равен нулю, если str1==str2, и положите-лен, если str1>str2 копирует kol символов строки si в строку sp («хвост» отбрасывается или дополняется пробелами) сравнивает не более kol символов строки str1 и строки str2, не делая различия регистров (см. функцию strncmp) заменяет первые kol символов строки str символом c ищет в строке str1 первое появление любого из множества символов, входящих в строку str2 ищет в строке str последнее вхождение символа с заполняет строку str заданным символом c определяет длину первого сегмента строки str1, содержа-щего только символы, из множества символов строки str2 ищет в строке str1 подстроку str2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2 преобразует символьную константу str в число двойной точности. Если endptr не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str ищет в строке str1 лексемы, выделенные символами из второй строки преобразует символьную константу str к значению «длинное число» с основанием baz (2≤baz≤36). Если endptr не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str преобразует буквы нижнего регистра в строке str в буквы верхнего регистра
Прототип char *strncat (char *sp, const char *si, int kol); int strncmp (const char *str1, const char *str2, int kol); char *strncpy (char *sp, const char *si, int kol); int strnicmp (char *str1, const char *str2, int kol); char *strnset (char *str, int c, int kol); char *strpbrk (const char *str1, const char *str2); char *strrchr (const char *str, int c); char *strset (char *str, int c); int strspn (const char *str1, const char *str2); char *strstr (const char *str1, const char *str2); double strtor (const char *str, char **endptr); char *strtok (char *str1, const char *str2); long strtol (const char *str, char **endptr, int baz); char *strupr (char *str);
Функция strncat strncmp strncpy strnicmp strnset strpbrk strrchr strset strspn strstr strtod strtok strtol strupr

Пример 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.029 сек.