int main(void)
{
char s[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i;
i = 0;
while (s[i] != '\0') {
printf("%c -> %c\n", s[i], lower(s[i]));
i++;
}
return 0;
}
int lower(int c)
{
return (c >= 'A' && c<= 'Z') ? c + 'a' - 'A' : c;
}
Это программа для преобразования всех алфавитов в нижний регистр. Итак, в решении они использовали более низкую функцию, но я не знаю, почему они использовали int в качестве возвращаемого типа.
2 ответа
Почему функция lower имеет int как тип возвращаемого значения и тип ввода?
Код полностью
int
математический. Даже если подпись былаchar c
, код имел бы результатint
из-за обычных целочисленных рекламных акций.int lower(int c) { return (c >= 'A' && c<= 'Z') ? c + 'a' - 'A' : c; }
Для отображения обычно 257 различных значений, таких как
tolower()
. Сint lower(char c) {
иc < 0
это может работать иначе, чемtolower()
.int
обычно близок к целочисленному размеру собственного процессора, а код обычно самый жесткий и быстрый сint
по сравнению сchar
. Это исторический выбор C и компромисс. Включение исходного языка C не привело к созданию прототипа сигнатуры функции, и все аргументыint
и под -int
были переведены вint
.
7.4 Обработка символов
Заголовок
<ctype.h>
объявляет несколько функций, полезных для классификации и сопоставления персонажи. Во всех случаях аргументом являетсяint
, значение которого должно быть может быть представлен какunsigned char
или должен быть равен значению макросаEOF
. Если аргумент имеет любое другое значение, поведение не определено. C11dr §7.4 1
Эти функции is...()
и to...()
работают в unsigned char range
(и EOF
), а не в char
.
Надежный код избегает отрицательного char
при вызове tolower()
или tolower()
подобных функций.
// printf("%c -> %c\n", s[i], lower(s[i]));
printf("%c -> %c\n", s[i], lower((unsigned char) s[i]));
Скорее всего, это попытка имитировать функцию tolower, которая использует int.
Аналогичный вопрос о tolower с использованием int находится здесь. Почему putchar, toupper, tolower и т. д. . взять int вместо char?
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.