При задании длины строки необходимо учитывать завершающий нуль символ. Строки при описании можно иниц.строковыми константами при этом нуль символ формируется автом-ки.
Для размещения строки в динам. пам. надо описать ук. на char, а затем выделить пам. с пом. new.(пр: char *p=newchar[m])
В этом случае длина строки может быть переменной и задаваться на этапе вып. прогр.
Вв/вывстрок.
#include <iostream.h>
int main()
{const int n=80;
char s[n];
cin>>s;
cout<<s;
return 0;}
Если будем вв стр. из неск. слов, то будет выв. только первое. Это связанно с тем, что вв вып только до перого пробельного слова. Если требуется вв строку из неск слов в одну стр. перем. исп. метод get и getline класса istream объектом кот. явл cin.
пример:…
Символ перевода строки так же считывается, но не запис в перем., а запис в нуль симв. Метод get работает аналогично, но оставляет символ перевода строки. Чтобы удалить его из потока необходимо вызвать cin.get без парам(). Если необх. вв неск строк, то метод getline исп в цикле.(пр.:while(cin.getline(s,n))
Для вв/выв строк можно исп. след ф-ии Си: gets, puts. (пр: gets(s))
Для вв/выв 1 симв. исп. getchar(), putchar().
21. Операции со строками. Строка как параметр функции.
Библ. <string.h> содержит след ф-ии работы с ф-иями.
Общий метод инициализации строки:
char stringVar[stringSize] = stringLiteral;
Пример
char a3tring[81] = "Borland C++ 5 in 21 days";
charNamed = "ReneKinner";
Второй способ присвоить значение строке — это вызвать функцию, которая копирует содержимое одной строки в другую, — не забывая при этом и нуль-символ. Эта функция называется strcpy. Она предполагает, что копируемая строка оканчивается символом NUL и прекращает копирование, как только встретит этот символ.
Прототип функции strcpy таков:
char* strcpy(char *target, const char *source);
Функция копирует строку source в строку target. Функция предполагает, что целевая строка имеет размер, достаточный для того, чтобы вместить содержимое строки-источника.
Пример
char name[41] ;
strcpy(name, "Borland C++ 5");
Функция strdup копирует одну строку в другую, при этом отводит необходимое количество памяти для целевой строки.
Прототипфункции strdup таков:
char* strdup(const char *source);
Функция копирует строку source и возвращает указатель на строку-копию.
Пример
char *string1 = "Монархия в Испании";
char *string2;
string2 = strdup(string1);
После того, как будет отведено необходимое количество памяти для строки string2, строка string1будет скопирована в строку string2.
Библиотека строковых функций предлагает также функцию strncpy, копирующую заданное количество символов из одной строки в другую.
Прототипфункции strncpy таков:
char * strncpy(char *target, const char *source, size_t num);
Функция копирует num символов из строки source в строку target. Функция не выполняет ни усечение, ни заполнение строки.
Пример
char str1[] = "Pascal";
char str2[] = "Hello there";
strcnpy(strl, str2, 5);
Переменная strlсодержит строку "Hellol". Заметьте, что символ ‘l’ строки-приемника, следующий за скопированной частью строки, сохранился.
Функция strlen возвращает количество символов в строке, в которое не включается нуль-терминатор.
Прототипфункции strncpy таков:
size_t strlen (const char *string) ,
Функция strlen возвращаетдлинустроки string. size_t — этоимя, приписанноетипу unsigned int оператором typedef.
Пример
char str[] = "1234567890";
size_t i;
i = strlen(str),
Переменной i будет присвоено значение 10.
Конкатенация строк означает их последовательное присоединение друг к другу.
Прототипфункции strcat таков:
char *strcat(char *target, const char *source) ;
Функция добавляет к содержимому целевой строки содержимое строки-источника и возвращает указатель на целевую строку. Функция предполагает, что целевая строка может вместить содержимое объединенной строки.
Пример
char string[81] ;
strcpy(string, "Turbo");
strcat (string, " C++");
Переменная stringсодержит строку "TurboC++".
Функция strncat добавляет к содержимому целевой строки указанное количество символов из строки-источника.
Прототипфункции strcat :
char *strncat(char *target, const char *source, size_t num);
Функция добавляет к содержимому целевой строки num символов из строки-источника и возвращает указатель на целевую строку.
char strl[81] = "Hello I am ";
char str2[41] = "Keith Thompson";
strncat(strl, str2, 5);
Функция strcmp выполняет сравнение двух строк с учетом регистра символов.
Прототипфункции strcmp:
int strcmp(const char *strl, const char *str2);
Функция сравнивает строки strl и str2. Возвращает в качестве результата сравнения целую величину:
< 0 когда strl меньше, чем str2;
= 0 когда strl равна str2;
> 0 когда strl больше, чем str2.
char stringl[] = "Borland C++";
char string2[] = "BORLAND C++";
i = strcmp(string1, string2);
В последнем операторе переменной i присваивается положительное значение, так как string1 больше string2 (ASCII-коды символов в нижнем регистре больше ASCII-кодов символов в верхнем.)
Функция stricmp выполняет сравнение двух строк, не учитывая регистра символов.
Прототипфункции stricmp:
int stricmp(const char *strl, const char *str2);
Функция сравнивает строки strl и str2, не делая различия между символами в нижнем и верхнем регистре. Возвращает в качестве результата сравнения целую величину:
< 0 когда strl меньше, чем str24
= 0 когда strl равна str24
> 0 когда strl больше, чем str2.
char string1[] = "Borland C++";
char string2[] = "BORLAND C++";
int i = strcmp(string1, string2);
В последнем операторе переменной i присваивается значение 0, так как string1 и string2 отличаются друг от друга только регистром символов.
Функция strncmp выполняет сравнение заданного количества символов двух строк с учетом регистра символов.
Прототип функции strncmp:
int strncmp(const char *strl, const char *str2, size_t num);
Функция сравнивает первые num символов строк strl и str2. Возвращает в качестве результата сравнения целую величину:
< 0 когда strl меньше, чем str2;
= 0 когда strl равна str2;
> 0 когда strl больше, чем str2.
char string1[] = "Borland C++";
char string2[] = "Borland Pascal";
i = stricmp(string1, string2, 9);
В последнем операторе переменной i присваивается отрицательное значение, так как значение "Borland С" меньше, чем "Borland Р".
Функция strnicmp
Функция strnicmp выполняет сравнение заданного количества символов двух строк без учета регистра символов.
Прототипфункции strnicmp :
int strnicmp(const char *strl, const char *str2, size_t num);
Функция сравнивает первые num символов строк strl и str2, не делая различия в регистре символов. Возвращает в качестве результата сравнения целую величину:
< 0 когда strl меньше, чем str2;
= 0 когда strl равна str2;
> 0 когда strl больше, чем str2.
char string1[] = "Borland C++";
char string2[] = "BORLAND Pascal";
i = strnicmp(string1, string2, 7);
Прототипфункции strlwr:
char* strlwr (char *source)
Функция преобразует символы верхнего регистра в символы нижнего регистра в строке source. Другие символы не затрагиваются. Функция возвращает указатель на строку source.
char str[] = "HELLO THERE";
strlwr(str);
Переменная str теперь содержит строку "hellothere".
Прототип функции strupr:
char* strupr(char *source)
Функция преобразует символы нижнего регистра в символы верхнего регистра в строке source. Другие символы не затрагиваются. Функция возвращает указатель на строку source.
char str[] = "Borland C++";
strupr(str);
Переменная str теперь содержит строку "BORLAND С ++".
Прототип функции strrev:
char* strrev(char *str)
Функция обращает порядок символов в строке str и возвращает указатель на строку str. charstr[] = "Hello";
strrev(str) ;
cout « str;
Будет выведено "olleH".
Функция strchr определяет первое вхождение символа в строку.
Прототипфункции strchr:
char* strchr(const char *target, int c)
Функция находит первое вхождение символа с в строку target. Функция возвращает указатель на символ в строке target, который соответствует заданному образцу с. Если символ с в строке не обнаруживается, функция возвращает 0.
Пример
char str[81] = "Borland C++";
char *strPtr;
strPtr = strchr(str, '+');
Указатель strPtr теперь содержит адрес подстроки "++" в строке str.
Функция strrchr определяет последнее вхождение символа в строке.
Прототипфункции strrchr:
char* strrchr(const char *target, int c)
Функция находит последнее вхождение символа с в строку target. Функция возвращает указатель на символ в строке target, который соответствует заданному образцу с. Если символ с в строке не обнаруживается, функция возвращает 0.
char str[81] = "Borland C++ is here";
char* strPtr;
strPtr = strrchr(str, '+');
Указатель strPtr теперь указывает на подстроку "+ ishere " в строке str.
Функция strspn возвращает число символов с начала строки, совпадающих с любым символом из шаблона.
Прототипдляфункции strspn:
size_t strspn(const char *target, const char *pattern)
Функция strspn возвращает число символов от начала строки target, совпадающих с любым символом из шаблона pattern.
char str[] = "Borland C++ 5";
char substr[] = "narlBod";
int index;
index = strspn(str, substr);
Этот оператор присваивает 8 переменной index, потому что первые восемь символов из str содержатся в подстроке substr.
Функция strcspn просматривает строку и выдает число первых символов в строке, которые не содержатся в шаблоне.
Прототипфункции strcspn:
size_t strcspn(const char* str1, const char* str2)
Функция strcspn просматривает строку str1 и выдает длину подстроки, отсчитываемой с начала строки, символы которой полностью отсутствуют в строке str2.