Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Передача строк в качестве параметров функций

Строки

Одномерный массив наиболее часто применяется в виде строки символов. Строка — это одномерный массив символов, заканчивающийся нулевым символом. В языке С признаком окончания строки (нулевым символом) служит символ '\0'. Таким образом, строка содержит символы, составляющие строку, а также нулевой символ. Это единственный вид строки, определенный в С.

Объявляя массив символов, предназначенный для хранения строки, необходимо предусмотреть место для нуля, т.е. указать его размер в объявлении на один символ больше, чем наибольшее предполагаемое количество символов. Например, объявление массива str, предназначенного для хранения строки из 10 символов, должно выглядеть так:

char str[11];

Последний, 11-й байт предназначен для нулевого символа.

Записанная в тексте программы строка символов, заключенных в двойные кавычки, является строковой константой, например,

" некоторая строка"

В конец строковой константы компилятор автоматически добавляет нулевой символ.

Для обработки строк в С определено много различных библиотечных функций. Чаще всего используются следующие функции:

Имя функции Выполняемое действие
strcpy(s1, s2) Копирование s2 в s1
strcat(s1, s2) Конкатенация (присоединение) s2 в конец s1
strlen(s1) Возвращает длину строки s1
strcmp(s1, s2) Возвращает 0, если s1 и s2 совпадают, отрицательное значение, если s1 < s2 и положительное значение, если s1 > s2
strchr(s1, ch) Возвращает указатель на первое вхождение символа ch в строку s1
strstr(s1, s2) Возвращает указатель на первое вхождение строки s2 в строку s1

Эти функции объявлены в заголовочном файле < string.h>. Применение библиотечных функций обработки строк иллюстрируется следующим примером:

#include < stdio.h>

#include < string.h>

 

int main(void)

{

char s1[80], s2[80];

 

gets(s1);

gets(s2);

 

printf(" Длина: %d %d\n", strlen(s1), strlen(s2));

 

if(! strcmp(s1, s2)) printf(" Строки равны\n");

 

strcat(s1, s2);

printf(" %s\n", s1);

 

strcpy(s1, " Проверка.\n");

printf(s1);

if(strchr(" Алло", 'e')) printf(" л есть в Алло\n");

if(strstr(" Привет", " ив")) printf(" найдено ив ");

 

return 0;

}

Если эту программу выполнить и ввести в s1 и в s2 одну и ту же строку " Алло! ", то на экран будет выведено следующее:

Длина: 5 5

Строки равны

Алло! Алло!

Проверка,

л есть в Алло

найдено ив

Следует помнить, что strcmp() принимает значение ЛОЖЬ, если строки совпадают (хоть это и несколько нелогично). Поэтому в тесте на совпадение нужно использовать логический оператор отрицания! как в предыдущем примере.


Передача строк в качестве параметров функций

Строка в Си++ - это массив символов, заканчивающийся нуль-символом – ‘\0’ (нуль-терминатором). По положению нуль-терминатора определяется фактическая длина строки. Количество элементов в таком массиве на 1 больше, чем изображение строки.

Для работы со строками существуют специальные библиотечные функции, которые содержатся в заголовочном файле string.h.

Строки при передаче в функции могут передаваться как одномерные массивы типа char или как указатели типа char*. В отличие от обычных массивов в функции не указывается длина строки, т. к. в конце строки есть признак конца строки /0.

//Функция поиска заданного символа в строке

int find(char *s, char c)

{

for (int I=0; I< strlen(s); I++)

if(s[I]==c) return I;

return –1

}

 

Строки

Строка в C++ – это массив символов, заканчивающийся нуль-символом – ’\0’ (нуль-терминатором). По положению нуль-терминатора определяется фактическая длина строки. Количество элементов в таком массиве на 1 больше, чем изображение строки.

 

A \0   A
”A” строка (2 байта)   ’A’ символ (1 байт)

 

Рис. 4. Представление строки и символа

 

Присвоить значение строке с помощью оператора присваивания нельзя. Поместить строку в массив можно либо при вводе, либо с помощью инициализации.

char s1[10]=" string1"; //инициализация

char s2[]=" string2"; //инициализация

char s3[10];

cin> > s3; //ввод

//выделение памяти под динамическую строку

char *s4=new char[strlen(s3)+1];

strcpy(s4, s3); //копирование строки s3 в строку s4

Для работы со строками существуют специальные библиотечные функции, которые содержатся в заголовочном файле string.h.

Прототип функции Краткое описание Примечание
unsigned strlen(const char* s); Вычисляет длину строки s.  
int strcmp(const char* s1, const char* s2); Сравнивает строки s1 и s2. Если s1< s2, то результат отрицательный, если s1==s2, то результат равен 0, если s2> s1 – результат положительный.
int strcnmp(const char* s1, const char* s2); Сравнивает первые n символов строк s1 и s2. Если s1< s2, то результат отрицательный, если s1==s2, то результат равен 0, если s2> s1 – результат положительный.
char* strcpy(char* s1, const char* s2); Копирует символы строки s1 в строку s2.  
char* strncpy(char* s1, const char* s2, int n); Копирует n символов строки s1 в строку s2. Конец строки отбрасывается или дополняется пробелами.
char* strcat(char* s1, const char* s2); Приписывает строку s2 к строке s1  
char* strncat(char* s1, const char* s2); Приписывает первые n символов строки s2 к строке s1  
char* strdup(const char* s); Выделяет память и переносит в нее копию строки s При выделении памяти используются функции

 

Строки при передаче в функции могут передаваться как одномерные массивы типа char или как указатели типа char*. В отличие от обычных массивов в функции не указывается длина строки, т. к. в конце строки есть признак конца строки \0.

<== предыдущая лекция | следующая лекция ==>
Пример 6. 4. | Теоретическая часть. Строки и текстовые файлы




© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.