С++ для начинающих




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


Упражнение 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";

}

// ***** Реализация с использованием класса string *****

#include <iostream>

#include <string>

int main()

{

    int errors = 0;

    string str( "a very long literal string" );

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

    {

          int len = str.size();

          string str2 = str;

          if ( str != str2 )

    }

    cout << "класс string: "

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

}

Что эти программы делают?

Оказывается, вторая реализация выполняется в два раза быстрее первой. Ожидали ли вы такого результата? Как вы его объясните?

Упражнение 3.15

Могли бы вы что-нибудь улучшить или дополнить в наборе операций класса string, приведенных в последнем разделе? Поясните свои предложения.




Содержание  Назад  Вперед