Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ЭУМКД КИТ-ч1-Бутов.docx
Скачиваний:
17
Добавлен:
05.05.2019
Размер:
262.85 Кб
Скачать

Тема 8. Строки символов

Строка представляет собой массив символов, заканчивающийся нуль-символом. Нуль-символ – это символ с кодом, равным нулю, что записывается в виде управляющей последовательности ‘\0’. По положению нуль-символа определяется фактическая длина строки. Строку можно инициализировать строковой константой:

char str[50] = “Vasia”; //первые элементы массива str: ‘V’, ‘a’, ‘s’, ‘i’, ‘a’, ‘\0’

Можно не указывать размерность массива:

char str[ ] = “Vasia”; //выделяется память под 6 элементов: 5 букв и нуль-символ

Возможна инициализация с помощью набора символьных констант:

char str[50] = {‘V’, ‘a’, ‘s’, ‘i’, ‘a’}; // первые элементы: 5 букв и нуль-символ

Если размерность не указывать, то к инициализаторам нужно обязательно добавить нуль-символ:

char str[ ] = {‘V’, ‘a’, ‘s’, ‘i’, ‘a’, ‘\0’}; //выделяется память под 6 элементов

Для ввода данных с клавиатуры в строку символов используются функции gets, scanf, getchar. Для вывода содержимого строки на экран используются функции puts, printf, putchar. Все эти функции описаны в заголовочном файле stdio.h:

#include <stdio.h>

void main()

{

const int N = 50;

char str1[N], str2[N], str3[N], str4[N];

int i;

//ввод: вариант 1

gets(str1); //в str1 вводится строка символов. Окончание ввода – по нажатию //клавиши ВВОД (Enter)

//ввод: вариант 2

scanf("%s", str2); //в str2 вводится строка в которой недопустимы пробельные

//символы. Окончание ввода – по нажатию клавиши ВВОД или клавиши ПРОБЕЛ.

fflush(stdin); //очистка потока ввода stdin

//ввод: вариант 3

scanf("%10c", str3); //в str3 вводится 10 символов (завершение ввода клавишей ВВОД)

str3[10] = ‘\0’; //с помощью операции присваивания добавляется нуль-символ

fflush(stdin); //очистка stdin, если с помощью scanf было введено > 10 символов

//ввод: вариант 4

i = 0;

while(1)

{

str4[i] = getchar();

if (str4[i] == ‘\n’) break;

i++;

}

str4[i] = ‘\0’; //последний введенный символ (‘\n) заменяется на ‘\0’

// вывод: вариант 1

puts(str1); //вывод str1 и переход на начало новой строки

// вывод: вариант 2

printf("%s\n", str2); //вывод str2 и переход на начало новой строки

// вывод: вариант 3

i = 0;

while(str3[i] != ‘\0’) //можно записать короче: while(str3[i])

{

printf("%c", str3[i]); //можно совместить 2 строки: printf("%c", str3[i++]);

i++;

}

printf("\n");

// вывод: вариант 4

i = 0;

while(str4[i] != ‘\0’) //можно записать короче: while(str4[i])

{

putchar(str4[i]); //можно совместить 2 строки: putchar(str4[i++]);

i++;

}

}

Пример программы копирования одной строки в другую:

#include <stdio.h>

void main()

{

const int N = 50;

char str1[N], str2[N] = “\”Zubilo\” – chempion”;

char *p1 = str1, *p2 = str2;

//вариант 1

int i = 0;

do

str1[i] = str2[i];

while(str1[i++] != ‘\0’); //можно записать короче: while(str1[i++]);

//вариант 2

int i = 0;

while(1);

{

str1[i] = str2[i];

if (str1[i++] == ‘\0’) break; //можно записать короче: if (!str1[i++]) break;

}

//вариант 3

int i = 0;

while((str1[i] = str2[i]) != ‘\0’) //можно записать короче: while(str1[i] = str2[i])

i++;

//вариант 4

while((*p1 = *p2) != ‘\0’)

{

p1++;

p2++;

}

//вариант 5

while((*p1++ = *p2++) != ‘\0’);

//вариант 6

while(*p1++ = *p2++);

//вывод результата копирования на экран

puts(str1); //можно и так: p1 = str1; puts(p1);

}