Технология программирования. Базовые конструкции C/C++. Липачев Е.К. - 51 стр.

UptoLike

Составители: 

51
При вводе могут возникнуть ошибки, если количество введенных
символов окажется больше, чем выделено памяти для строки. Например,
если в программе предыдущего примера ввести "September-" (строка
заканчивается символом '-'), то будет сообщено об ошибке, поскольку для
хранения month выделено 10 байт, а введенные данные, с учетом нулевого
символа, требуют 11 байт. Отметим, что начальные и терминальные пробелы
при вводе игнорируются и не вызовут проблем.
Аналогично, недостаток выделенной памяти может привести к ошибке
и при выполнении других операций со строками.
Пример. Сравнение строк с помощью функции strcmp(s1,s2).
Сравнение производится посимвольно от начала строк, сравниваются коды
символов. Функция возвращает 0, если строки s1 и s2 совпадают,
отрицательное значение, если s1<s2 и положительное значение, если
s1>s2. При сравнении учитывается регистр.
// Сравнение строк
char s1[]="Progress";
char s2[]="Progress";
char s3[]="Programm";
// Проверка на равенство строк:
if(strcmp(s1, s2)==0) cout<<"\n"<<s1<<"="<<s2;
// или, что гораздо лучше:
if(!strcmp(s1, s2)) /* отрицание '!', т.к. при
равенстве результат = 0 */
cout<<"\n"<<s1<<"="<<s2;
// кто раньше в алфавитном порядке:
int p=strcmp(s2, s3);
if(!p) cout<<"\n s2=s3";
else if(p>0) cout<<"\n"<<s2<<">"<<s3;
else cout<<"\n"<<s2<<"<"<<s3;
Замечание. При повторном использовании результата одной и той же
функции это значение сохраняют в локальной переменной примере
переменная p). Это важное правило позволяет сделать код эффективнее
книге Голуб А. Правила программирования на Си и Си++ оно обозначено как
―Избегайте дублирования усилий).
     При вводе могут возникнуть ошибки, если количество введенных
символов окажется больше, чем выделено памяти для строки. Например,
если в программе предыдущего примера ввести "September-" (строка
заканчивается символом '-'), то будет сообщено об ошибке, поскольку для
хранения month выделено 10 байт, а введенные данные, с учетом нулевого
символа, требуют 11 байт. Отметим, что начальные и терминальные пробелы
при вводе игнорируются и не вызовут проблем.
      Аналогично, недостаток выделенной памяти может привести к ошибке
и при выполнении других операций со строками.
     Пример. Сравнение строк с помощью функции strcmp(s1,s2).
Сравнение производится посимвольно от начала строк, сравниваются коды
символов. Функция возвращает 0, если строки s1 и s2 совпадают,
отрицательное значение, если s1s2. При сравнении учитывается регистр.
// Сравнение строк
char s1[]="Progress";
char s2[]="Progress";
char s3[]="Programm";
// Проверка на равенство строк:
if(strcmp(s1, s2)==0) cout<<"\n"<0) cout<<"\n"<"<