Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
21
Добавлен:
30.05.2020
Размер:
428.13 Кб
Скачать

int main()

{

char str[] = "Idle people have the least leisure.";

// или char *str = "Idle people have the least leisure.";

dispstr(str);

//вызов функции вывода строки

_getch();

 

return 0;

 

}

 

//--------------------------------------------------------------

//функция вывода строки

void dispstr(char* ps)

{

 

while( *ps )

 

cout << *ps++;

 

cout << endl;

 

}

 

или

 

//--------------------------------------------------------------

//функция вывода строки

void dispstr(char ps[])

{int i=0;

 

while( ps[i]!='\0' )

 

cout << ps[i++]; cout << endl;

}

особенности посимвольного вывода строки

int main()

{

static char h[ ]="Press any key!"; //h – указатель-константа на неконстантные данные static char *hd=" Press any key!"; //hd–неконстантный указатель на константные данные

int i;

 

// или

h[i]

ok!!!

for (i=0; i<15; i++) putchar (*(h+i));

putchar

('\n');

// или

hd[i]

ok!!!

for (i=0; i<15; i++) putchar (*(hd+i));

putchar

('\n');

 

 

 

while (*hd !='\0') putchar (*hd++);

// ok!!!, неконстантный указатель

putchar

('\n');

 

 

 

//while

(*h !='\0') putchar (*h++);

//error!!!, указатель-константа

putchar

('\n');

 

 

 

_getch();

 

 

 

return

0;

 

 

 

}

 

 

 

 

Копирование строк

Для С-строк (исключая инициализацию) не определена операция присваивания,

поскольку строка не является базовым типом данных. Копирование строк выполняется с помощью функций стандартной библиотеки или посимвольно «вручную».

Копирование строк «вручную»:

#include <cstring>

//for strlen()

int main()

"Oh, Captain, my Captain! "

{ char str1[] =

const int MAX =

"our fearful trip is done";

80;

char str2[MAX];

 

unsigned j;

 

for(j=0; j<strlen(str1); j++)

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

11

 

str2[j] = str1[j];

str2[j] = '\0';

cout << str2 << endl; _getch();

return 0;

}

или, как и для массивов, !!!

#include <сstring>

 

char

s[9];

 

 

char

hello[] = "motor";

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

memcpy

(s,

hello, sizeof (hello));

cout<<

s<<

endl;

// motor

Обратите внимание, что в результате операции sizeof (hello) получим значение размера строки 6=5+1(завершающий ‘\0’). Если же определять длину строки с помощью функции strlen(hello), то получим значение, равное 5 (без учета последнего ‘\0’).

Копирование строк с помощью функции пользователя:

//прототипы функций

void vvodstr (char*, const int);

//ввод строки

void vyvodstr (char*);

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

void copystr (char*, const char*); //копирование строки

int main()

 

 

{const int MAX=80;

 

char str1[MAX];

 

char str2[MAX];

 

vvodstr

(str1, MAX);

 

vyvodstr

(str1);

 

copystr(str2, str1);

 

cout << "new ";

 

vyvodstr

(str2);

 

_getch();

 

return 0;

 

 

}

 

 

//--------------------------------------------------------------

 

 

void vvodstr(char* st, int n)

 

{cout << "string? " << endl;

 

cin.getline(st, n);

 

}

 

 

//--------------------------------------------------------------

void vyvodstr(char* st)

{cout << "string : " << endl; cout << st << endl;

}

//--------------------------------------------------------------

copystr(char* dest, const char* src)

void

{

 

//пока не нуль-символ

while( *src )

 

*dest++ = *src++;

//копировать символ из src в dest

*dest = '\0';

//завершить строку dest нуль-символом

}

 

 

Оптимизация текста программы на примере функции копирования

Проследим возможности Си++ по «оптимизации» текста на примере функции копирования:

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

12

 

Соседние файлы в папке Лабораторні роботи