Учимся программировать на языке C++

Уменьшение количества операторов


Чтобы определить конец символьной строки, каждая из предыдущих программ использовала следующий цикл while:

while (*string != '\0')

Как уже обсуждалось, символ NULL ('\0') представляет собой значение ASCII 0. Так как C++ использует значение 0, чтобы представить ложь, ваши программы могут записать предыдущий цикл следующим образом:

while (*string)

В данном случае пока символ, определяемый указателем строки, не равен 0 (NULL), условие оценивается как истинное и цикл будет продолжаться. Из урока 5 вы узнали, что постфиксная операция увеличения C++ позволяет вам использовать значение переменной, а затем увеличивает это значение. Многие программы на C++ используют постфиксные операции увеличения и уменьшения, чтобы сканировать массивы с помощью указателей. Например, использование постфиксной операции увеличения делает следующие циклы while идентичными:

while (*string)

{

cout *string++;

}

while (*string)

{

cout *string;

string++;



}

Оператор cout *string++, заставляет C++ вывести символ, указываемый указателем string, а затем увеличить текущее значение string, чтобы он указывал на следующий символ. С помощью этих методов следующая программа SMARTPTR.CPP иллюстрирует новую реализацию функций show_string и string_length:

#include iostream.h

void show_string(char *string)

{

while (*string) cout *string++;

}

int string_length(char •string)

(

int length = 0;

while (*string++) length++;

return(length) ;

}

void main(void)

{

char title[] = "Учимся программировать на языке C++";

show_string(title) ;

сout " содержит " string_length(title) " символов";

}

Если вы встретите функции C++, которые манипулируют строками с помощью указателей, то они с большой долей вероятности будут использовать подобную краткую запись.


Сканирование символьной строки

Одно из наиболее широко употребляемых использовании указателей в программах на C++ заключается в сканировании символьных строк. Для уменьшения количества кода многие программы используют следующие операторы для сканирования строки:

while (*string)

{


// операторы

string++;

// продвинуть к следующему символу

}

Следующая функция string_uppercase использует указатели для преобразования символов строки в символы верхнего регистра:

char *string_uppercase(char* string)

{


char *starting_address = string; // адрес string[0];

while (*string)

{


if ((*string = 'а') (*string = 'я')) *string = *string - 'a' + 'A';

string++;

}

return(starting_address);

}

Эта функция сохраняет и возвращает начальный адрес строки, который позволяет вашим программам использовать функцию следующим образом:

cout Btring_uppercase("Привет, мир!") endl;

* Поскольку при переводе книги обрабатываемые символы заменены с английских на русские, то этот алгоритм работает не для всех кодировок кирилицы в DOS и Windows. — Прим. перев.


Содержание раздела