Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Подсчитать число вхождений строки t в строке u




Удалить все вхождения подстроки t в строке u

В строке u заменить все вхождения подстроки t на подстроку s

 

//arb2009_string_substring_fun3

#include<iostream.h>

#include<string.h>

//#include<stdio.h>

// get() <stdio.h>

const int n=100;

////////////////////////////////////////////////////////////

void strcpy1(char s[n], char t[n])

{

int i=0;

while((s[i]=t[i])!='\0')i++;

}

/////////////////////////////////////////////

// string s is substring of p;

bool strstr1(char s[n],char p[n])

{

int i,j;

bool t=false;

for (i=0;i<strlen(p)-strlen(s)+1 &&!t;i++)

{

bool r=true;

for (j=0;j<strlen(s)&&r;j++)

if (s[j]!=p[i+j]) r=false;

t=r;

}

return t;

}

 

/////////////////////////////////////////

// position substring s in string p;

int strstr2(char s[n],char p[n])

{

int i,j;

int pos=-1;

bool t=false;

for (i=0;i<strlen(p)-strlen(s)+1&&!t;i++)

{

bool r=true;

for (j=0;j<strlen(s)&&r;j++)

if (s[j]!=p[i+j]) r=false;

t=r;

}

 

if (t) pos=i-1;else pos=-1;

return pos;

}

////////////////////////////////////////////////////

void conc(char x[n], char y[n])

{

 

int i,j;

int p=strlen(x);

int q=strlen(y);

i=p;

j=0;

while ((x[i]=y[j])!='\0'){j++;i++;}

}

 

 

////////////////////////////////////////////////////

void delette(char x[n],int pos,int len)

{

int i,j;

if (pos>strlen(x)-len)

{

cout<<"impossible!"<<endl;

return;

}

 

j=pos; i=pos+len;

while ((x[j]=x[i])!='\0')

{

i++;j++;

}

}

////////////////////////////////////////////////////////////////

// insert string y[n] to string x[n]

// with position pos in x[n]

void insert(char y[n],int pos, char x[n])

{

if (pos==strlen(x))

{

conc(x,y); return;

}

if ((pos>strlen(x))||(pos<0))

{

cout<<" impossible!! ";

return;

}

char z[n],m[n];

int i,j;

i=0;

j=pos;

 

while ((z[i]=x[j])!='\0')

{

i++;j++;

}

strcpy1(m,y);

conc(m,z);

 

i=pos;

j=0;

 

while ((x[i]=m[j])!='\0')

{

i++;j++;

}

}

 

 

///////////////////////////////////////////////

void main()

{

char t[n];

int pos;

char u[n],s[n];

int p;

 

/////////////////////////////////////////

 

cout<<"Task 1"<<endl;

cout<<" calculate number of substr t in str u"<<endl;

cout<<" Enter string u= "<<endl;

cin.getline(u,n);

 

cout<<" Enter substring t t= "<<endl;

cin.getline(t,n);

 

p=0;

while (strstr2(t,u)!=-1)

{

u[strstr2(t,u)]='#';

p++;

}

 

cout<<"u = "<<u<<endl;

 

cout<<"number of input substring t in string u p= "<<p<<endl;

cin.get();

cout<<"reconstruction u"<<endl;

 

int i=0;

while (i<strlen(u))

{

if (u[i]== '#') u[i]=t[0];

i++;

}

cout<<"u = "<<u<<endl;

cin.get();

//////////////////////////////////////////////

cout<<"Task 2"<<endl;

cout<<"delete substring t in string u"<<endl;

 

while (strstr2(t,u)!=-1)

{

delette(u,strstr2(t,u),strlen(t));

}

 

cout<<"new u = "<<u<<endl;

cin.get();

///////////////////////////////////////////////

cout<<"Task3"<<endl;

cout<<"in string u change substring t on substring s"<<endl;

cout<<" Enter string u= "<<endl;

cin.getline(u,n);

 

cout<<" Enter string t= "<<endl;

cin.getline(t,n);

 

cout<<" Enter string s= "<<endl;

cin.getline(s,n);

 

 

if (strstr2(t,u)==-1)

{

cout<<" string t is not substring of string u:

error!!"<<endl;

return;

}

 

while (strstr2(t,u)!=-1)

{

p=strstr2(t,u);

cout<<"p= "<<p<<endl;

delette(u,p,strlen(t));

cout<<" after delete new string u = "<<u<<endl;

cout<<"length u= "<<strlen(u)<<endl;

cin.get();

 

insert(s,p,u);

cout<<"after insert new u = "<<u<<endl;

cout<<"len u= "<<strlen(u)<<endl;

 

cin.get();

}

cout<<"new u = "<<u<<endl;

cin.get();

 

}

 

Лекция №12

Файловый ввод-вывод

 

Потоки С++

 

Принципиальным для понимания С++-системы ввода-вывода является то что она опирается на понятие потока. Поток (stream)

- это абстракция, которая либо синтезирует информацию, либо потребляет ее и связывается с любым физическим устройством с помощью С++ - системы ввода-вывода. Характер поведения всех потоков одинаков, несмотря на различные физические устройства, с которыми они связываются.Поскольку потоки действуют одинаково, то практически ко всем видам устройствможно применить одни и теже функции и операторы ввода-вывода. Например, методы используемые для записи данных на экран, также можно использовать для вывода на принтер или для записи в дисковый файл.

В самой общей форме поток можно назвать логическим интерфейсом с файлом. С++ -определение термина «файл» можно отнести к дисковому файлу, экрану, клавиатуре, порту, файлу на магнитной ленте и пр. Хотя файлы отличаются по форме и возможностям, все потоки одинаковы.

Поток связывается с файлом при выполнении операции открытия файла и отсоединяется от него с помощбю операции закрытия.

 

Существуют два вида потоков текстовый и двоичный. Текстовый поток используется для ввода-вывода символов. При этом может происходить некоторые преобразования символов. Например, при выводе символ новой строки может быть преобразован в последовательность символов: возврата каретки и перехола на новую строку. Поэтому может не быть взаимно- однозначного соответствия между тем, что посылается в поток и тем что в действительности записывается в файл.

Двоичный поток можно использовать с данными любого типа, причем в этом случае никакого преобразования символов не выполняется.

Говоря о потоках, необходимо понимать, что, что вкладывается в понятие «текущая позиция». Текущая позиция- это место в файле, с которого будет выполняться следующая операция доступа к файлу. Например, если длна файла равна 100 байт, и известно, что уже прочитана половина этого файла, то слежующая операция чтения произойдет на байте 50, который в данном случае и является текущей позицией.

Встроенные С++-потоки

В С++ содержится ряд встроенных потоков (cin, cout, cerr, clog), которые автоматически открываются, как только программа начинает выполняться. cin – стандартный входной, а cout – стандартный выходной поток. Потоки cerr и clog предназначены для вывода информации об ошибках. По умолчанию стандартные С++- потоки связываются с консолью..

 





Поделиться с друзьями:


Дата добавления: 2016-12-06; Мы поможем в написании ваших работ!; просмотров: 626 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

В моем словаре нет слова «невозможно». © Наполеон Бонапарт
==> читать все изречения...

2174 - | 2121 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.