Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗФ_ОАиП / Курс Лекций ОАиП.doc
Скачиваний:
65
Добавлен:
21.03.2016
Размер:
5.89 Mб
Скачать

Функция scanf предназначена для ввода данных в заданном формате. Обращение имеет вид:

scanf(nf,&a1,&a2,...)

Здесь nf - форматная строка; &a1,&a2,... - список ввода - указатели на значения вводимых переменных a1, a2, .....

Подробно эти функции рассматривались в разделе "Консольный ввод-вывод".

5.5 Операции над строками

5.5.1 Реализация операции присваивания

Поскольку строка является массивом, а не специальным типом данных, то для строк не определена операция присваивания. Присваивание можно выполнить посимвольно, т.е. "вручную", или с помощью стандартных функций strcpy и strncpy.

Рассмотрим первый способ. Пример:

s[0]='В'; s[1]='в'; s[2]='о'; s[3]='д';

Рассмотрим второй способ. Для использования функций strcpy и strncpy к программе следует подключить заголовочный файл <string.h> предложением #include <string.h>

Обращение к функции strcpy имеет вид:

strcpy(s1,s2);

Функция копирует все символы строки s2, включая завершающий нуль-символ, в строку s1 и возвращает s1.

Пример 1.

/* Копирование строки s2 в строку s1 c помощью strcpy */

#include<stdio.h>

#include<string.h>

#include<conio.h>

void main()

{

int n; // Длина строки

char s2[20]="Скоро сессия!"; //Исходная строка

n=strlen(s2)+1; //Длина s1

char *s1=new char[n]; //Строка - копия s1

// char s1[20];

strcpy(s1,s2); //Копирование s2 в s1

puts(s2); // Вывод s2

puts(s1); //Вывод s1

puts(strcpy(s1,s2)); //strcpy возвращает s1

getch();

}

Результат выполнения программы – три строки:

Скоро сессия!

Скоро сессия!

Скоро сессия!

Обращение к функции strncpy имеет вид:

strncpy(s1,s2,n);

Функция копирует не более n символов из строки s2 в строку s1 и возвращает s1. При этом, если длина исходной строки (s2) превышает или равна n, нуль-символ в конец строки s1 не добавляется. В противном случае строка s1 дополняется нуль-символами до n-го символа. Если строки перекрываются, поведение не определено.

Пример 2.

/* Копирование строки s2 в строку s1 c помощью strncpy */

#include<stdio.h>

#include<string.h>

#include<conio.h>

void main()

{

int n; // Длина строки

char s2[20]="Скоро сессия!"; //Исходная строка

n=strlen(s2)+1; //Длина s1

//char *s1=new char[n]; //Строка - копия s1

char s1[20];

strncpy(s1,s2,n); //Копирование s2 в s1

puts(s2); // Вывод s2

puts(s1); //Вывод s1

puts(strncpy(s1,s2,n)); //strncpy возврващает s1

getch();

}

Результат выполнения программы такой же, как и в примере 1.

Примечание 1. В рассмотренных примерах использована функция strlen(s), возвращающая фактическую длину строки s, не включая нуль-символ.

Примечание 2. Программист должен сам заботиться о том, чтобы в строке-приемнике (s1) хватило места для строки-источника (s2), и о том, чтобы строка всегда имела нуль-символ.

Выход за пределы строки и отсутствие нуль-символа является распространенными причинами ошибок в программах обработки строк.