Программирование >>  Немодифицирующие последовательные алгоритмы 

1 ... 21 22 23 [ 24 ] 25 26 27 ... 78


U = S + t;

cout u = s + t = u endl;

cout << u.sizeO = u.sizeO endl;

cout u[6] = u[6] endl;

cout Enter two new strings s and t:\n ;

cin >> s t;

cout s.sizeO = s.sizeO endl; cout (s < t ? s < t : s >= t ); cout endl; return 0;

Эта программа показывает, что для соединения двух строк можно использовать оператор + (как и обсужденный выше оператор +=). Для ввода и вывода определены операторы >> и , и ведут они себя так же, как и для обычных строк. Это справедливо и для оператора доступа по индексу [], как показано при выводе значения и[6]. И наконец, для сравнения строк мы можем применить операторы ==, !=, <, >, <= и >=, как показано на примере оператора <. Ниже дан пример работы этой программы, в котором подчеркнут текст, введенный пользователем:

U = s + t = АААААВС U.sizeO = 7 u[6] = С

Enter two new strings s and t: xxxxx xxy S.sizeO = 5 s < t

Несмотря на различные возможные длины строк, экземпляры класса string мотут быть элементами массивов и контейнеров STL, например:

strelem.cpp: Строки С++ в качестве элементов

списка L и массива а.

♦include <iostream>

♦include <string>

♦include <list>

♦include <algorithm>

using namespace std;

int mainO

{ string s( One ), t( Two ), u( Three ); list<string> L L.push back(s) L.push back(t) L.push back(u) string a[3];



сору(L.begin!), L.end!), а) ;

for !int к:=0; k:<3; к:++) cout а [к] endl; return 0;

Как легко предсказать, вывод этой программы будет следующий:

One Two Three

Теперь давайте займемся применением класса string для второго способа решения задачи, рассмотренной в разделе 2.9. Вспомним, что программа mapl.cpp сперва пыталась прочесть файл phone.txt, чтобы использовать его в качестве телефонного справочника. Если такого файла не существует, с помощью данной программы его можно создать. Программа тар2а.срр отличается тем, что она не использует операторы new и delete для строк в стиле С, а вместо этого - новый тип string. Комментарии, начинающиеся с !, указывают, чем эта программа отличается от mapl.cpp:

II map2a.cpp: Вторая версия телефонного справочника,

использующая тип string.

#include <iostream>

#include <fstream>

#include <iomanip>

#include <string>

#include <map>

using namespace std;

!

typedef map<string, long, less<string> > directype;

Прочитать все символы до \n и сохранить их в str,

за исключением \п, который будет прочитан, но не сохранен.

void getaline!istream &is, string &str)

{ char ch;

str = ; II \

for !;;)

{ is.get!ch);

if (is.fail!) II ch == \n) break;

str += ch;

void Readlnput!directype &D) { ifstream ifstr! phone.txt ); long nr;

string str; !

if !ifstr)



ifstr.closeO ;

void ShowCommands0 { cout

Commands: ?name

/name

number name

find phone number,\n delete\n

insert (or update)\n list whole phonebook\n save in file\n exit endl;

void ProcessCommands(directype &D) { ofstream ofstr; long nr;

string str; !

char ch;

directype::iterator i; for (;;)

{ cin >> ch; пропустить пустые символы и прочитать ch

switch (ch){

case ?: case /: найти или удалить: getaline(cin, str);

i = D.find(str); !

if (i == D.endO )

cout Not found.\n ; else Ключ найден,

if (ch == ?) Команда Найти

cout Number: (*i).second endl; else Команда Удалить

D.erase(i); !

break;

case !: добавить (или обновить)

cin >> nr; if (cin.failO)

{ cout Usage: number name\n ;

{ cout Entries read from file phone.txt:\n ;

for (;;)

{ ifstr >> nr;

ifstr.getO; пропустить пробел

getaline(ifstr, str); !

if (!ifstr) break;

cout setw(9) nr str endl; D[str] = nr; !



1 ... 21 22 23 [ 24 ] 25 26 27 ... 78

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика