Кто определяет упорядочивание символов

У меня есть запрос на основе ниже программы -

char ch;
ch = 'z';
while(ch >= 'a')
{
    printf("char is  %c and the value is %d\n", ch, ch);
    ch = ch-1;
}

Почему печать полного набора строчных букв не гарантирована в вышеупомянутой программе. Если C не делает много гарантий об упорядочивании символов во внутренней форме, то, кто на самом деле делает это и как?

9
задан nicael 21 May 2014 в 18:47
поделиться

5 ответов

Разработчик компилятора выбирает базовый набор символов. Единственное, что в стандарте должно быть сказано, это то, что должно быть доступно определенное минимальное количество символов и что числовые символы являются смежными.

Требуемые символы для среды выполнения C99: A - Z , a - z , 0 ] через 9 (которые должны быть вместе и по порядку), любой из ! "#% & '() * +, -. / :; <=>? [\] ^ _ { |} ~ , пробел, горизонтальная табуляция, вертикальная табуляция, подача формы, предупреждение, возврат, возврат каретки и новая строка. Это остается неизменным в текущем черновике C1x, следующей итерации этого стандарта.

Все остальное зависит от реализации.

Например, такой код:

int isUpperAlpha(char c) {
    return (c >= 'A') && (c <= 'Z');
}

сломается на мэйнфрейме, который использует EBCDIC, разделив символы верхнего регистра на две области.

Действительно переносимый код будет учитывать это. Все остальное код должен документировать свои зависимости.

Более переносимой реализацией вашего примера будет что-то вроде:

static char chrs[] = "zyxwvutsrqponmlkjihgfedcba";
char *pCh = chrs;
while (*pCh != 0) {
    printf ("char is %c and the value is %d\n", *pCh, *pCh);
    pCh++;
}

Если вам нужно настоящее переносимое решение, вам, вероятно, следует использовать islower ( ) , поскольку код ch ecks только латинские символы не будут переноситься (например) на греческий язык с использованием Unicode в качестве базового набора символов.

17
ответ дан 4 December 2019 в 08:50
поделиться

Почему печатается весь набор строчные буквы не гарантируются в вышеуказанная программа.

Потому что можно использовать C с кодировкой символов EBCDIC , в которой буквы не идут подряд.

4
ответ дан 4 December 2019 в 08:50
поделиться

Очевидно, определяется реализацией C, которую вы используете, но более вероятно, что для вас это определяется Американским стандартным кодом обмена информацией (ASCII).

1
ответ дан 4 December 2019 в 08:50
поделиться

В наши дни люди, которые называют ваш код непереносимым, занимаются бесполезным педантизмом. Поддержка несовместимых с ASCII кодировок остается только в стандарте C из-за устаревших мэйнфреймов EBCDIC, которые отказываются умирать. Вы никогда не встретите несовместимую с ASCII кодировку символов ни на одном современном компьютере ни сейчас, ни в будущем. Дайте ему несколько десятилетий, и вы никогда не встретите ничего, кроме UTF-8.

Чтобы ответить на ваш вопрос о , кто решает кодировку символов: хотя это номинально нарушает вашу реализацию (компилятор C, библиотека и ОС), в конечном итоге это было решено Интернетом, обе существующие практики и стандарты IETF. Предположительно современные системы предназначены для связи и взаимодействия друг с другом, и было бы огромной головной болью преобразовывать каждый заголовок протокола, файл html, источник javascript, имя пользователя и т. Д. Между ASCII-совместимыми кодировками и EBCDIC или некоторыми другими. прочий местный бардак.

В последнее время стало ясно, что универсальная кодировка не только для текста, анализируемого машиной, но и для текста на естественном языке также весьма желательна. (Обмен текстами на естественном языке не так важен, как машинно-анализируемый текст, но все же очень распространен и важен.) Unicode предоставил набор символов, и как единственная совместимая с ASCII кодировка Unicode, UTF-8 в значительной степени является преемником ASCII, поскольку универсальная кодировка символов.

1
ответ дан 4 December 2019 в 08:50
поделиться

Он определяется набором символов выполнения.

В настоящее время в большинстве случаев это набор символов ASCII, но C не требует использования определенного набора символов.

Обратите внимание, что существуют некоторые гарантии порядка символов в наборе символов выполнения. Например, каждая из цифр от «0» до «9» гарантированно будет иметь значение, на единицу большее, чем значение предыдущей цифры.

1
ответ дан 4 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: