- •Алгоритмитизация и программирование Лекция 1
- •Общие сведения
- •Модель osi. Понятие об интерфейсах и протоколах. Рекомендация itu-t X.200
- •1.3. Системы счисления
- •Лекция 2
- •2.1. Способы описания алгоритмов функционирования узла коммутации
- •2.2. Описание алгоритмов с помощью диаграммы состояний
- •Variable
- •Input port
- •Input signal
- •2.3. Описание алгоритмов с помощью временной диаграммы
- •Описание алгоритмов с помощью текстового описания
- •Лекция 3
- •3.2. Типы данных
- •3.3. Арифметические операторы
- •3.4. Операторы сравнения
- •3.5. Побитовые операторы
- •3.6. Кодовые таблицы
- •Int main()
- •Лекция 4
- •4.2. Переменные
- •4.3. Ввод/вывод
- •4.4. Арифметические операции
- •4.5. Взаимосвязь чисел и литер
- •Лекция 5
- •5.1. Базовые конструкции
- •5.2. Операторы базовых конструкций
- •If (условие) {операторы 1}
- •Лекция 6
- •6.1. Указатели
- •6.2. Функции
- •6.3. Массивы
- •Лекция 7
- •7.1. Создание и инициализация строк
- •7.2. Функции для работы со строками
- •Лекция 8
- •8.1. Структуры
- •8.2. Формирование контрольной суммы
- •Лекция 9
- •9.1. Операции с файлами
- •9.2. Открытие текстового файла для записи
- •9.3. Открытие текстового файла для чтения
7.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[7]; //b указывает на 7-oй символ str
*b = 'I'; // присваиваем первому элементу b символ 'I'
cout << b; // выводим строку, начиная от b на экран
}
Изменения могут вносяться напрямую (см. пример)
#include <iostream>
#include <windows.h>
#include <cstdio> //для функции gets()
using namespace std;
int main()
{
char a[10];
cout<<"Input a="; gets(a); //занесение символа в массив a[0]-a[9]
int i;
for (i=0; i<=10; i=i+1)
{cout<<i<<" "<<&a+i<<" "<<a[i]<<endl;}
a[0]=65; //запись символа А в массив a[0]
for (i=0; i<=10; i=i+1)
{cout<<i<<" "<<&a+i<<" "<<a[i]<<endl;}
return 0;
}
или с использованием специальных функций.
Имеется ряд функций для работы со строками. Некоторые из них приведены в табл.7.1.
Табл.7.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;
}
Задание. Выполнить лабораторную работу 7 (Работа со строками).