BamBiR | Дата: Четверг, 27.06.2013, 06:55 | Сообщение # 1 |
Рядовой
Guruh: Администраторы
Xabarlar: 15
Sovg`alar: 0
Репутация: 0
Status: Offline
| Уменьшение количества операторов
Чтобы определить конец символьной строки, каждая из предыдущих программ использовала следующий цикл 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. — Прим. перев.
|
|
| |