Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по С++.doc
Скачиваний:
27
Добавлен:
20.08.2019
Размер:
2.26 Mб
Скачать

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

Формат:

char *strcру(char* ST1, const char* ST2);

Копирует строку ST1 в строку ST2. При копировании строк надо побеспокоится, чтобы приемник принял длину текущего источника. Если максимальная длина получателя меньше текущей длины источника, значением получателя становятся первые литеры источника, которые поместились в получатель. текущая длина получателя равна максимальной длине получателя.

Определяет длину строки

Формат:

Int strlen(const char* ST1);

Возвращает количество литеров без учета нулевого символа.

Примеры функций для работы со строками

Наименование

Назначение функций

strchar

Поиск первого вхождения заданного символа в строке

[const] char *strchar([const] char *str, int val)

strrchar

Поиск последнего вхождения заданногосимвола в строе

strcmp

Сравнение двух строк

int strcmp(const char *str, const char *str2)

strncat

Добавление n символов в строку

strncmp

Сравнение n символов двух строк

strncpy

Копирование n символов из одной строки в другую

strdup

Дублирование строки с выделением ей ОП

strnset

Установка n символов в строке в заданное значение

strrev

Инвертирование (реверс) строки

char *strrev(char *str)

strset

Установка всех символов строки в заданное значение

char *strset(char *str, int val)

strspn

Поиск первой подстроки из заданного набора символов

strupr

Преобразование прописных букв в заглавные

char *strupr(char *str)

strlwr

Преобразование символов строки в прописные

char *strlwr(char *str)

Пример ввода-вывода строк

#include <iostream>

#include <string>

using namespace std;

void main ( )

{

// объявление и инициализация строки

char SM [ ] = "FILES" ;

cout<<SM<<"\n";

char SM2 [100 ],SM3[100];

cin.get(SM2,100).get();//читает со всеми пробелами с признаком концы строки

//и гасит признак новой строки

cout<<SM2<<'\n';

cin.get(SM3,100).get();cout<<SM3<<'\n';

strcat(SM2,SM3);

printf("\nVVV = %s\n",SM2);

string ST;

cin>>ST;//читает до первого пробела

cout<< ST<<" - pasmep = "<<ST.size()<<'\n';

getline(cin,ST);//читает от пробела до конца строки

cout<< ST<<" - pasmep = "<<ST.size()<<'\n';

getline(cin,ST);//читает от начала со всеми пробелами до признака конца строки

cout<< ST<<" - pasmep = "<<ST.size()<<'\n';

}

Пример удаления символов цифр из строки

#include <iostream>

using namespace std;

void main ()

{

char s [] = “n0hg123ere a45 re gj 77 4 hj lk985git”;

int I, j;

for (j=0,i=0; s[i] ; i++)

if(!( s[I >= ‘0’ && s[i] <= ‘9’ ))

s[j++] = s[i];

s[j] + ‘\0’;

cout<< s << endl;

}

Указатели и строки

Задачи системного программирования часто связаны с обработкой символьных массивов неопределенной длины. именно для их обработки чаще и используются указатели

. Пример обработки массива строк через массив указателей

#include <iostream>

using namespace std;

const int SIZE = 10 ; const int LEN = 40 ;

int main ( )

{

char *pa [ SIZE ] ; // массив указателей на строки

char *str = new char [ LEN ] ; // строка-буфер

int n ; // количество введенных строк

char *p ; int I, j ; // временные указатель и переменные

while ( true ) // цикл ввода не менее пяти строк

{

cout << “Enter not less than 5 lines “

<< “or empty line for an exit\n” ;

for ( I = 0; I < SIZE ; i++ ) // цикл ввода строк

{

cin.getline ( str, LEN ) ;

if ( ! *str ) // если строка пустая,

break ; // то выйти из цикла ввода for

// выделение блока памяти

pa [ I ] = new char [ strlen ( str ) + 1 ] ;

// дублирование str в выделенный блок

strcpy_s ( pa [ I ], LEN, str ) ;

}

if ( I < 5 ) // если введено < 5 строк,

for ( j = 0; j < I; j++ )

delete pa [ j ] ; // то освободить память

else break ; // иначе выйти из цикла while

} // окончание цикла while

n = I ; // сохранение числа введенных строк

// вывод введенных строк

cout << “\nENTERED ARRAY\n” ;

for ( I = 0 ; I < n ; i++ ) cout << pa [ I ] << endl ;

// поиск самой короткой строки

int iMin = 0 ; // индекс строки с минимальной длиной

for ( I = 1; I < n; i++ )

if ( strlen ( pa [ I ] ) < strlen ( pa [ iMin ] ) )

iMin = I ;

// Обработка массива

if ( iMin ) // если строка не первая ( iMin != 0 ),

{

p = pa [ iMin ] ; // то запомнить ее адрес

// определить новый порядок строк: с адреса pa [iMin] до адреса pa [1]

// на место текущего адреса pa [i] записывать предыдущий адрес pa [i-1]

for ( I = iMin; I > 0; i-- ) pa [ I ] = pa [ I – 1 ] ;

// переопределить адрес первой строки

pa [ 0 ] = p ;

}

cout << “\nARRAY – RESULT\n” ;

for ( I = 0; I < n; i++ )

{ cout << pa [ I ] << endl ; delete pa [ I ] ; }

delete str ;

return 0 ;

}