пятница, 6 ноября 2015 г.

IX занятие "Особой вид массива - строка"

На девятом занятии мы узнали узнали, что такое строка. Строка в C/C++ - это массив символов. Строка всегда завершается символом '\0' (нуль-терминатор). Нуль-терминатор - это один символ (хоть и обозначается на письме двумя - обратный слэш, ноль), означающий конец строки.
В C/C++ существует множество способов работы со строками. Все их можно разделить на две категории:
  1. работа со строкой как с массивом символов
  2. работа с использованием специальных функций обработки строк
Краткое содержание занятия:
1. Строка в C/C++ - это массив символов (char). Последним символом в строке должен быть '\0' (нуль-терминатор, признак конца строки). Строка объявляется подобно любому другому типу массивов:
char str[50];
Здесь char - тип массива (символьный), str - имя массива (строки), которое мы задали произвольно, [50] - размерность массива (количество символов в строке). Задавая размерность массива, необходимо предусмотреть место для нуль-терминатора, т.е. в строке str[50] может храниться максимум 49 символов, тогда 50-ым символом будет '\0'.

2. Объявление и инициализация строк. Строки заключаются в двойные кавычки:
"Это строка",
а символы - в одинарные:
'Э','т','о',' ','с','т','р','о','к','а','\0'.
Единичный символ 'A' и строка "A" - не одно и то же, т.к. строка "A" на самом деле содержит два символа. Какой второй, догадались? Правильно, нуль-терминатор. Т.е., компилятор автоматически добавляет в конец строки нуль-терминатор, если видит двойные кавычки. Ниже приведены три абсолютно одинаковых объявления с одновременной инициализацией:
char str[7= {'h','e','l','l','o','!','\0'};
char str[7]={"hello!"};
char str[7]="hello!";

К элементам строки можно получить доступ точно так же, как к элементам любого массива:
int mas[5= {3,7,2,9,5};
char str[7= {'h','e','l','l','o','!','\0'};
// в третий элемент целочисленного массива записывается число 10:
mas[2]=10;
// в третий элемент строки записывается символ X
str[2]='X';

После этих операций массивы будут выглядеть следующим образом:
mas: {3,7,10,9,5}
str: "heXlo!"
Почему изменился третий элемент массива, а не второй? Правильно, потому что в C/C++ нумерация элементов начинается с нуля.

3. Работа со строкой как с массивом символов происходит также, как и с любым другим массивом.

Например, ввод:
for(int i=0;i<6;i++) scanf("%c",&str[i]);
str[6]='\0';

Или вывод:
for (int i=0;str[i];i++) printf("%c",str[i]);

На что следует обратить внимание?

  • Работа со строкой, как и с любым массивом, производится в цикле (for).
  • При вводе цикл продолжается, пока не дойдем до последнего элемента, при выводе - пока существует str[i], т.е. str[i] не равно '\0'
  • %c - спецификатор вывода символьного типа данных (выводим как символ)
  • при вводе в последний элемент необходимо поместить нуль-терминатор '\0'
4. Для работы со строкой как со строкой существуют следующие функции ввода:
gets(str);
std::cin>>str;
scanf("%s",str);
Но они сами по себе не обеспечивают корректность ввода (т.е. ввод только определенного количества символов, на которое рассчитан массив). Зато при правильном использовании эти функции автоматически помещают в конец строки символ '\0'.
... и функции вывода:
puts(str);
std::cout<<str<<std::endl;
printf("%s",str);

5. Лучшим вариантом является работа со строкой как с массивом символов, при этом символы читаются из буфера клавиатуры при помощи функции getch(). Т.к. функция getch() читает символы из буфера клавиатуры, то они не отображаются на экране. Если мы хотим увидеть вводимые символы, необходимо одновременно выводить их на экран, например при помощи printf().
Листинг программы STR:


















Скачать листинг программы "mas" (в текстовом формате)

Пример выполнения программы:

Комментариев нет:

Отправить комментарий