Язык Си в примерах/Верхний регистр: различия между версиями
Содержимое удалено Содержимое добавлено
Метка: possible spambot (testing) |
Оформление, уточнения; примеры переписаны для посимвольного преобразования. |
||
Строка 1:
{{{{Book template}}/Содержание
; Дано: ''текст'' — последовательность кодов ASCII — на [[w:Стандартные потоки#Стандартный ввод |стандартном вводе]] программы. Последовательность конечна, но ее длина заранее неизвестна.
; Надо: вывести на [[w:Стандартные потоки#Стандартный вывод |стандартный вывод]] исходный текст, заменив в нем строчные буквы латиницы (''a, …, z'') прописными (''A, …, Z'').
; Указание: воспользоваться особенностью [[w:ASCII#Кодировка |кодовой таблицы ASCII]]: коды прописных букв отличаются от кодов соответствующих строчных на постоянную величину (а именно: 32.)
== Решение ==
В следующей программе введенная пользователем строчка переводится в верхний регистр,▼
то есть маленькие буквы становятся заглавными.▼
▲В следующей программе
Заглавные буквы и символы, не являющиеся латинскими буквами не меняются.▼
▲
Обратите внимание на то, что с символами (переменными типа <code>char</code>)
можно оперировать как с числами. В частности, <source lang="c" enclose="none" >'Z' - 'A'</source> есть число, равное
разности
Символы можно также сравнивать друг с другом, при этом сравниваются
{{Якорь |upper.c}}
<source lang="c">
#include <stdio.h>
int
main ()
int i;▼
{
while
if ('a' <= c && c
putchar (c);
}▼
}
assert (! ferror (stdin));
</source>
''Главный цикл'' этой программы напоминает таковой для рассмотренной в разделе [[../Максимум/]]. Однако, вместо использования <code >scanf</code> для чтения чисел — и, соответственно, <code >printf</code> для вывода результатов обработки — здесь мы используем функции <code >getchar</code> для чтения отдельных ''знаков'' (кодов) и <code >putchar</code> для вывода каждого «обработанного» знака.<ref name="getchar" /><ref name="putchar" />
Кроме того, меняется ''условие корректности'' ввода: если в предыдущей программе мы требовали возврата <code >EOF</code> как признака ''исчерпания'' входного потока, то <code >getchar</code> определена стандартом как возвращающая <code >EOF</code> также и как ''признак ошибки ввода.''<ref name="getchar" /> Поэтому, завершив чтение, мы явно требуем ''ложности'' значения функции ''признака ошибки'' <code >ferror</code> для стандартного ввода (<code >stdin</code>.)<ref name="ferror" />
== Использование стандартной библиотеки ==
[[#upper.c |Приведенный выше]] код можно еще более упростить, если воспользоваться стандартной функцией преобразования регистра <code >toupper</code>, ''объявленной'' в заголовке <code >ctype.h</code>.<ref name="case-mapping" />
Некоторые ''реализации'' языка, кроме того, определяют функции <code >strlwr</code> и <code >strupr</code>, которые переводят в нижний и верхний регистр ''строки'', а не отдельные символы. Эти функции, однако, не являются ''стандартными'' и их наличие (или отсутствие) зависит от выбранной реализации языка.
{{Якорь |toupper.c}}
<source lang="c">
int
main ()
{
int c;
while ((c = getchar ()) != EOF) {
}
▲ return 0;
assert (! ferror (stdin));
}▼
return 0;
</source>
==См. также==
* [[
* {{w |ASCII}}
== Примечания ==
{{Примечания | refs =
<!-- Пожалуйста поддерживайте алфавитный порядок для name. Спасибо. -->
<ref name="case-mapping" >{{Cite web | title = 7.4.2 Character case mapping functions | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=221 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
<ref name="ferror" >{{Cite web | title = 7.21.10.3 The ferror function | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=357 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
<ref name="getchar" >{{Cite web | title = 7.21.7.6 The getchar function | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=350 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
<ref name="putchar" >{{Cite web | title = 7.21.7.8 The putchar function | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=351 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
}}
{{BookCat}}
|