ВУЗ:
Составители:
Рубрика:
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"< "<
Страницы
- « первая
- ‹ предыдущая
- …
- 49
- 50
- 51
- 52
- 53
- …
- следующая ›
- последняя »