Язык программирования C++. Вводный курс


Класс string - часть 4


string str( "fa.disney.com" );

 

int size = str.size();

for ( int ix = 0; ix < size; ++ix )

      if ( str[ ix ] == '.' )

           str[ ix ] = '_';

Вот и все, что мы хотели сказать о классе string прямо сейчас. На самом деле, этот класс обладает еще многими интересными свойствами и возможностями. Скажем, предыдущий пример реализуется также вызовом одной-единственной функции replace():

replace( str.begin(), str.end(), '.', '_' );

replace() – один из обобщенных алгоритмов, с которыми мы познакомились в разделе 2.8 и которые будут детально разобраны в главе 12. Эта функция пробегает диапазон от begin() до end(), которые возвращают указатели на начало и конец строки, и заменяет элементы, равные третьему своему параметру, на четвертый.

Упражнение 3.12

Найдите ошибки в приведенных ниже операторах:

(a) char ch = "The long and winding road";

(b) int ival = &ch;

(c) char *pc = &ival;

(d) string st( &ch );

 

(e) pc = 0;     (i) pc = '0';

(f) st = pc;    (j) st = &ival;

(g) ch = pc[0]; (k) ch = *pc;

(h) pc = st;    (l) *pc = ival;

Упражнение 3.13

Объясните разницу в поведении следующих операторов цикла:

while ( st++ )

        ++cnt;

 

while ( *st++ )

        ++cnt;

Упражнение 3.14

Даны две семантически эквивалентные программы. Первая использует встроенный строковый тип, вторая – класс string:

// ***** Реализация с использованием C-строк *****

 

#include <iostream>

#include <cstring>

 

int main()

{

    int errors = 0;

    const char *pc = "a very long literal string";

 

    for ( int ix = 0; ix < 1000000; ++ix )

    {

          int len = strlen( pc );

          char *pc2 = new char[ len + 1 ];

          strcpy( pc2, pc );

          if ( strcmp( pc2, pc ))

               ++errors;

 

          delete [] pc2;

    }

    cout << "C-строки: "

         << errors << " ошибок.\n";




Начало  Назад  Вперед



Книжный магазин