Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация и программирование.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5.59 Mб
Скачать

8.2. Функции для работы со строками

Указатели применимы только к целым числам и массивам целочисленных цифр. Это позволяет хранить в памяти косвенные адреса ячеек, которые по определению могут быть только целыми числами.

Пример (тип переменной – целое число):

#include <iostream>

#include <windows.h>

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{ CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text;}

int main()

{

int a;

cout <<Rus("Введите целое число: "); cin>>a;

int *address; address=&a; //указатель на адрес, где хранится a

cout <<Rus("Число=")<<a<<Rus(" Адрес ячейки=")<<address<<endl;

return 0;

}

Пример. Тип переменной – символ массива, строка введена заранее.

#include <iostream>

using namespace std;

int main()

{

char str[] = "Hello, ivan!"; //объявляем символьный массив

char *b; //объявляем указатель на символ

b = &str[0]; //указатель b=0 указывает на 0-oй символ str

cout << b<<endl; //выводим строку, начиная от 0 на экран

str[7] = 'I'; //присваиваем 7 элементу символ 'I'

cout << b<<endl; //выводим строку, начиная от 0 на экран

b=&str[7]; //указатель b=0 указывает на 7-oй символ str

cout<<b<<endl; //выводим строку, начиная от 7 на экран

cout<<str[11]; //выводим 11 литеру строки на экран

return 0;

}

Пример. Тип переменной – символ массива, строка длиной не более 10 литер вводится пользователем, 11-ый и далее символы игнорируются.

#include <iostream>

#include <windows.h>

#include <cstdio> //для функции gets()

using namespace std;

int main()

{

char a[10];

cout<<"Input a="; gets(a); //занесение 10 символов в массив a[0]-a[9]

int i;

for (i=0; i<=9; i=i+1) //Чтение массива a[10]

{cout<<&a+i<<" "<<a[i]<<endl;}

cout<<"**********************"<<endl;

a[0]=65; //запись символа А в ячейку a[0]

for (i=0; i<=9; i=i+1) //Чтение массива a[10]

{cout<<&a+i<<" "<<a[i]<<endl;}

return 0;

}

Имеется ряд функций для работы со строками. Некоторые из них приведены в табл.8.1.

Табл.8.1. Функции для работы со строками

Функция

Описание

str.length()

Определение длины строки с именем str

strcmp(s1,s2)

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

str.append("xxx")

Добавление фрагмента “ххх” в конец строки с именем str

str.insert(i, "yyy");

Вставка фрагмента “yyy” в позицию i

str.replace(i, j, Rus("zzz"))

Замена j символов на фрагмент “zzz” в позиции i

str.erase(i,j)

Удаление из строки j символов с позиции i

str.at(i)

Показать символ на позиции i

Пример: работа со строками.

#include <iostream>

#include <windows.h> // необходима для функции CharToOem

#include <cstring> //включение библиотеки операций со строками

#include <string> //включение библиотеки операций со строками

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{

CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text; }

int main()

{

string str1, str2, frag;

cout<< Rus ("Введите первую строку="); cin>>str1;

cout<< Rus ("Введите вторую строку="); cin>>str2;

cout<<endl;

cout<< Rus ("1: Длина первой строки ")<<endl;

cout<< Rus ("2: Сравнить строки строки ")<<endl;

cout<< Rus ("3: Склеить строки")<<endl;

cout<< Rus ("4: Добавить в конец первой строки ")<<endl;

cout<< Rus ("5: Вставить в первую строку ")<<endl;

cout<< Rus ("6: Заменить в первой строке ")<<endl;

cout<< Rus ("7: Удалить из первой строки ")<<endl;

cout<< Rus ("8: Показать символ первой строки ")<<endl;

cout<<endl;

int a=1, i, j;

while (a!=0)

{

cin >>a;

switch (a)

{

case 1:

cout <<Rus("Длина строки=")<<str1.length()<<endl;

cout <<endl;

break;

case 2:

if (str1==str2) cout << Rus("Строки одинаковы !!!")<<endl;

else cout << Rus("Строки разные !!!")<<endl;

cout <<endl;

break;

case 3:

str1=str1+str2;

cout <<Rus("Результат = ")<<str1<<endl;

cout <<endl;

break;

case 4:

cout <<Rus("фрагмент "); cin>>frag;

cout <<Rus("Результат = ")<<str1.append(frag)<<endl;

cout <<endl;

break;

case 5:

cout <<Rus("фрагмент "); cin>>frag;

cout <<Rus("в позицию ");

cin >>i;

cout <<Rus("Результат = ")<<str1.insert(i, frag)<<endl;

cout <<endl;

break;

case 6:

cout <<Rus("после позиции ");

cin >>i;

cout <<Rus("число символов ");

cin>>j;

cout<<Rus("на "); cin>>frag;

cout <<Rus("Результат = ")<<str1.replace(i, j, frag)<<endl;

cout <<endl;

break;

case 7:

cout <<Rus("после позиции ");

cin >>i;

cout <<Rus("число символов ");

cin >>j;

cout <<Rus("Результат = ")<<str1.erase(i,j)<<endl;

cout <<endl;

break;

case 8:

cout <<Rus("на позиции ");

cin>>i;

cout <<Rus("Результат = ")<<str1.at(i)<<endl;

cout <<endl;

default: a=false;

}

}

return 0;

}

Задание 1. Выполнить лабораторную работу 8 (Работа со строками).

Задание 2. Выполнить лабораторную работу 8а (Работа со строками).