|
Программирование >> Немодифицирующие последовательные алгоритмы
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; !
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |