#include <iostream>
using std::cin;
using std::cout;
using std::endl;
Int main()
{
char string1[20],//массив из 20 символов:
//19 для хранения символов строки и 1 завершающий
string2 [] = "строка символов";//массив из 16 символов:
//15 исходных и 1 завершающий
cin>> string1; //cin читает символы с клавиатуры до тех пор,
//пока не встретится символ разделитель
cout<<"символы строки string1:"<<endl;
for (int i=0; string1[i]!= '\0'; ++i) //пока не встретился
cout<<string1[i]<<' '; //символ конца строки, вывод
//символов строки string 1через пробел
cout<<endl;
cout<<" строка string2:" <<string2<<endl;// вывод символов строки string2
system("pause");
return 0;
}
Для обработки строк можно использовать функции стандартной библиотеки (заголовочный фалйл < cstring >), например:
strlen – длина строки
strcpy, strncpy – копирование символов одной строки в другую
strcmp, strncmp – сравнение срок
strstr – выделение подстроки
strtok – выделение лексем (подстрок, ограниченных
определенным символом)
Пример 3_2_2. Использование функции strlen ()
# include < cstring >
#include <iostream>
using std::cout;
Int main()
{
//функция strlen – длина строки
char * str = "12321";
int k=1;
for(int i=0; i < static_cast<int>(strlen(str)/2); ++i) {
if (str[i]!= str[strlen(str) - i - 1]){ // -1 обязательно,
//иначе выход за границу массива!
k=0; break;
}
}
k? cout<<"true\n": cout<<"false\n"; // в данном случае – "true"
system("pause");
return 0;
}
Указатели и ccылки
Все обращения в программе к переменной по ее имени заменяются компилятором на адрес пямяти, где хранится значение переменной. Программист может определить собственные переменные для хранения адресов областей памяти. Такие переменные называются указателями.
Указатель – это производный тип, который предназначен для хранения адреса.
Значение указателя – адрес памяти. Значение указателя сообщает о том, где размещен какой-либо объект, но не сообщает о том, какое значение имеет этот объект.
Операция разыменования или разадресации, применяемая к указателю, позволяет получить доступ к значению, адрес которого хранится в указателе.
Объявление указателя:
тип *имя_указателя; // тип –тип данных, адрес которых хранит указатель
// имя_указателя – имя_переменной
Например:
int x = 5; // x –целая переменая
int *ptr_ x;// ptr _ x –указатель на целую переменную
void *ptr_ v;// ptr _ v –обобщенныйуказатель
xptr = &x;// Переменной ptr_ x присваивается адрес переменной x
// Операция & применима только к переменной – это операция
// взятия адреса
int y = *ptr_ x;// Операция * – это операция разыменования, которая
// возвращает значение, находящееся по адресу, записанному в
// указателе. В данном примере y получит значение 5.
// Данное определение y эквивалентно int y = x
ptr _ x = static _ cast < int *>(ptr _ v); // правильное приведение обобщенного
// указателя к типизированному указателю:
// ptr _ x получит значение ptr _ v
Указатель на константу и константный указатель. Указатель может быть константой или переменной, а также указывать на константу или на переменную. Если const стоит слева от звездочки, то это указатель на неизменяемые данные, если справа, то сам указатель –константа.
Например:
int x; // x –целая переменая
const int c x=1; // cx –целая константа
int * ptr_x; // ptr _ x –указатель на целую переменную
const int* ptr _ c x; // ptr _ cx –указатель на целую константу
int* const с ptr _x=& x;// cptr _ x –указатель-константа на целую переменную
const int* const с ptr_cx=& с x;
// cptr _ cx –указатель-константа на целую константу
Неконстантный указатель на константу (в примере ptr _ c x) "охраняет" значение данных, размещенных по этому указателю. Указатель изменить можно, данные – нельзя.
Константный указатель на переменную (в примере cptr _x) "охраняет" область памяти, выделенную для размещения данных – указатель изменить нельзя. При этом значения данных по этому указателю можно изменять в ходе выполнения программы.
Арифметические операции с указателями позволяют изменить как значение самого указателя, так и данных, которые «храняться по указателю».
Например:
int * ptr; // ptr –указатель на целую переменную
*ptr++ = 10; // Последовательность действий:
// 1. по адресу, записанному в ptr, будет записано значение 10;
// 2. значение ptr будет увеличено на количество байт,
// соответствующее его типу.
// эквивалентно: *ptr = 10; ptr++;
(*ptr)++; // значение по адресу ptr будет увеличено на 1
Ссылка – это синоним имени, указанного при инициализации ссылки.
Ссылка – это указатель, который всегда разыменовывается.
Объявление ссылки:
тип &имя_ссылки; // тип –тип данных, на которую указывает ссылка
// имя_ссылки – имя_переменной
Например:
Int i;
int & rfc = i; // rfc – сылка на целую переменную i