Помощничек
Главная | Обратная связь


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

Строки и символы: кавычки или апострофы?

Тема 8. СТРОКИ

Что такое строка в языке Си?

Строки являются одним из самых важных и часто используемых типов данных практически в любой языке программирования, некоторые из которых поддерживают специальный строковый тип, называемый обычно string. В языке Си такого типа в явном виде нет: строка в нем представляет собой массив типа char, заканчивающийся так называемым нуль-символом. Такое определение накладывает определенные особенности на работу со строками, изучаемые в данной теме. Рассматривается также библиотека string.h, содержащая ряд стандартных часто используемых функций для работы со строками.

Итак, для представления строки в языке Си используется массив типа char, заканчивающийся специальным символом \0. Под этот нуль-символ резервируется один элемент массива, поэтому для работы со строками длины N необходим массив длины N+1. Например, объявление

 

char myString[31];

 

выделяет память под строку с именем myString, позволяющую работать со строками, длина которых не превосходит 30 символов. Как и в массиве, нумерация символов строки начинается с нуля, поэтому эта строка позволяет работать с символами, индексы которых находятся в диапазоне от 0 до 29. Символ с индексом 30 – это нуль-символ.

Присвоение значения строке

Способ 1. Инициализация или присвоение значения при объявлении.

 

char myString[] = "Моя первая строка";

 

При использовании этого способа длину строки можно не указывать. Не нужно также и записывать нуль-символ в конец массива, поскольку эти действия выполняются автоматически. Проверить правильность присвоения можно, вызвав функцию printf():

 

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

Способ 2. Инициализация строки поэлементно.

char str[] = {'H','e','l','l','o','\0'};

 

В данном случае размер определяется автоматически, но нуль-символ нужно поставить явно.

Способ 3. Присвоение значения строке поэлементно после объявления.

 

char str[31];

myString[0] = 'H'; myString[1] = 'e';

myString[2] = 'l'; myString[3] = 'l';

myString[4] = 'o'; myString[5] = '!';

myString[6] = '\0';

 

Обратите внимание на то, что в данном случае нуль-символ нужно поставить явно, иначе определить конец строки будет невозможно. В частности, функция printf() не сможет определить, где заканчивать вывод. Эта ситуация будет напоминать автомобиль без тормозов: он где-то остановится, но заранее это место не известно. На экране появится нужное сообщение, а после него – какой-нибудь компьютерный мусор:

 

Еще один аспект, на который необходимо обратить внимание, заключается в том, что при объявлении строки указывается длина 31, но значения присваиваются только семи элементам. Это нормальная ситуация, поскольку все функции, работающие со строками, определяют конец строки не по количеству выделенной под нее памяти, а по позиции нуль-символа. Например, так делает функция printf().

 

Строки и символы: кавычки или апострофы?

Вы, наверное, уже заметили, что нами были использованы как апострофы 'H', так и кавычки "Моя первая строка". Подумайте минуту, почему это делалось?

Причина такого различия заключается в том, что символ, заключенный в апострофы имеет тип char, а несколько символов (в частности, и один символ), заключенных в кавычки являются строкой, т.е. массивом типа char, оканчивающимся нуль-символом. Получается, что 'H' – это просто символ, а "H" – уже строка. Набор символов, заключенных в кавычки, называется строковой константой, значение которой изменять нельзя.

Строковую константу можно задать также с помощью директивы #define:

#define GREETING "Hello, my dear friend!"

...

printf("%s", GREETING);

Ввод и вывод строк

Вывести строку на экран можно не только с помощью функции printf(). Самый простой способ вывода строки – воспользоваться функцией puts():

 

puts(myString);

Библиотека string.h

При работе со строками часто возникает потребность выполнить одно из стандартных действий: объединить две строки в одну, определить длину строки, сравнить две строки согласно алфавитному порядку, проверить наличия заданного символа в строке и некоторые другие. Все эти функции можно реализовать самостоятельно, поскольку они довольно простые, например, функция определения длины строки может выглядеть следующим образом:

 

int length(char myString[]) {

int i = 0;

while (myString[i] != '\0') {

i++;

}

return i;

}

 

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

 

 




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

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.