- •Подготовка программы к исполнению
- •Директива препроцессора #include
- •Математические функции из библиотеки cmath
- •Заголовок функции main
- •Объявление переменных.
- •Объявление переменных простого типа
- •Объявление констант простого типа
- •Перечисляемые переменные.
- •Логические операции
- •Операторы
- •Операторы сложные
- •Составной оператор
- •Структурированные операторы
- •Условный оператор.
- •Блок-схема оператора разветвления
- •Условная операция.
- •Операция «запятая» в операторе if.
- •Преобразование и привидение типов.
- •Оператор выбора варианта.
- •Блок-схема оператора варианта
- •Цикл по счётчику
- •Цикл c предусловием.
- •Цикл c постусловием.
- •Операторы передачи управления
- •1) Спецификации формата, которые определяются символом % - для выделения, контроля и преобразования соответствующих им введенных значений;
- •2) Любые символы, которые могут быть во входном потоке и которые надо игнорировать:
- •2) Первого символа, который не соответствует формату (например, буква или пробел после выделения числа); .
- •3) Заданной длины поля вводимого значения, если она определена в формате.
- •4.2.2. Форматы вывода данных
- •1) Спецификации формата, которые определяются символом % - для вывода .Значений, определенных списком аргументов, если они есть;
- •2) Любые символы, которые должны быть выведены в выходной поток;
- •2 Позиции отводятся для знака числа и точки.
- •Составные типы данных
- •Обработка двумерного массива
- •Указатели
- •Порядок выполнения операций над указателями
- •Арифметические операции над адресами
- •Операторы распределения памяти new и delete
- •Указатели и динамические массивы
- •Указатели и спецификатор const
- •Массивы указателей
- •Организация динамического двумерного массива
- •Функции работы со строками
- •Действия, производимые над строками и их правила Присвоение
- •Конкатенация строк
- •Копирование строк
- •Определяет длину строки
- •Указатели и строки
- •Введение в класс string
- •Структуры
- •Ссылочные переменные
- •Функции
- •Функции, имеющие возвращаемый параметр с помощью оператора return.
- •Объявление формальных параметров
- •Ввод - вывод записей
- •Дополнительные возможности работы с файлами
- •Работы с файлами и стандартный класс mfc cFileDialog.
- •Работа с файлами с помощью mfc( классы cFile, cStdioFile, ... ) и стандартный класс mfc cFileDialog.
- •Класс cFile
- •Класс cMemFile
- •Класс cStdioFile
- •Примеры записи и чтения из файла
Копирование строк
Формат:
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 ;
}