Приклад програми заміни рядків STL

Тепер, коли ми переглянули класи vector і string, можна розглянути приклад, що використовує їх обох, щоб зрозуміти, як ви можете працювати з класами vector і string

Створіть консольний додаток (console application) в CBuilder Для цього виберіть команду меню File | New і виберіть Console Application з першої сторінки запропонованих варіантів CBuilder створить новий файл проекту і основний файл програми, званий projectcpp Ця програма буде виконуватися тільки з вікна MS-DOS або в консольному режимі, в Windows 95 або NT, відповідно Додайте наступний код у вихідний файл projectcpp:

#include &ltstdioh&gt

#include &ltstdlibh&gt

#include &ltstringh&gt

#include &ltvector&gt using namaspace std

class StringReplacement

{

private:

string strSearchText string strReplcaeText

public: StringReplacement(void)

{

}

StringReplacement (string search, string replace )

{

strSearchText = search strReplaceText = replace

}

void DoReplace (string &amptext)

{

int i = 0

string strComplete = &quot" while  (i &lt textsize() )

{

if   (strncmp(textc_str()+i, strSearchText/c_str(), strSearchTextsize()) )

{

i += strSearchTextsize() strComplete += strReplaceText

}

else

{

strComplete += text[i] i++

}

}

text = strComplete

}

}

vector&lt StringReplacement,

allocator&ltStringReplacement&gt &gt strList

int main(int argc, char **argv)

{

if  (argc &lt 2)

{

printf (Використання: repl \

&quot&ltdefinitions-file&gt\n&quot)

return -1

}

FILE *fp = fopen(argv[1], &quotr&quot)

if  (fp == NULL )

{

printf (Не можу відкрити файл% s \ n, argv [1]) return -1

}

strListinsert (strListend (), StringRepacement ($ $ Автор $ $, Matt Telles))

strListinsert (strListend (), StringRepacement ($ $ Програма $ $, Matts Test))

char szBuffer [256] while  (feof(fp) )

{

if  (fgets(szBuffer, 255, fp) == NULL ) break

string s = szBuffer

for  (int i=0 i&ltstrListsize(), ++i ) strList[i]DoReplace (s ) printf(&quot%s&quot, sc_str())

}

fclose(fp) return 0

}

У цій демонстраційній програмі є кілька важливих моментів Програма, до речі, буде шукати і замінювати всі входження даного набору рядків у файлі іншим набором рядків Тут ми використовуємо vector для зберігання обєктів, які містять рядки Ви можете бачити, як ми проходимся по масиву, використовуючи методи класу vector size і operator [] На додаток, ви можете бачити, як vector може зберігати різні дані, навіть якщо вони і не походять від спільного предка Якщо ви знайомі з іншими системами, де робота з різними даними вимагає, щоб вони успадковували від загального базового класу, то ви знаєте, наскільки це приємно

Для запуску програми заміни відкрийте вікно MS-DOS і запустіть програму project1exe Вам доведеться створити два файли, перший з них файл замін, що містить елементи у вигляді

oldvalue=newvalue

де oldvalue – значення, яке ви хочете замінити, а newvalue – значення, яким ви хочете замінити старе Наприклад, для заміни всіх входжень рядка $ $ Author $ $ на імя Matt Telles ви можете написати:

$Author$=Matt Telles

<$ FНетрудно помітити, що програма, наведена в лістингу, не читає дані з другого файлу, заданого в параметрах командного рядка. Тобто заміна відбувається тільки явно зазначених у програмі рядків. Код на компакт-диску повністю ідентичний лістингу. Мабуть, автор залишив доопрацювання цієї програми читачеві як вправа. - Прим. пер.> Ця програма хороша як обробник шаблону для документів і вихідних файлів, яким потрібний заголовок, і в інших випадках Код цієї програми може бути вирізаний і поміщений в допоміжну функцію, яку ви могли б використовувати в своїх додатках для

генерації стандартизованих заголовків у своїх файлах, наприклад У другому файлі у вас повинен бути текст, наприклад:

The author of this program:

$Author$ and it was written on $Date$

Тоді після запуску програми заміни висновок буде виглядати так: The author of this program:

Matt Telles and it was written on Today

От і все, що можна сказати про вектори (vector) Як майже всі в STL, вони дуже прості у використанні і робота з ними інтуїтивно зрозуміла Згадайте про вектори, коли будете писати які-небудь класи або компоненти в CBuilder, яким буде потрібен масив невизначеного (або згодом змінюваного) розміру

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*