Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Учю Си :). Не понимаю, что делает оператор. Help. (http://forum.oszone.net/showthread.php?t=29474)

Guest 07-09-2004 22:35 204057

Код:

#include <stdio.h>
/* подсчет цифр, символов-разделителей и прочих символов */
main()
{
    int с, i, nwhite, nother;
    int ndigit[10];
    nwhite = nother = 0;
    for (i = 0; i < 10, ++i)
        ndigit[i]= 0;
    while ((c = getchar()) != EOF)
        if (c >='0' && с <= '9')
            ++ndigit[c – '0'];
        else if (c == ' ' || c == '\n' || c == '\t')
            ++nwhite;
        else
            ++nother;
    printf(“цифры =“);
    for (i = 0; i < 10; ++i)
        printf(“%d”, ndigit[i]);
    printf(“, символы-разделители =%d, прочие =%d\n”, nwhite, nother);
}

Что сие означатет " ++ndigit[c – '0'];" ?


[s]Исправлено: hasherfrog, 11:44 8-09-2004[/s]

Pasechnik 08-09-2004 00:44 204058

В переменной с - код введенного символа. Потом от неё отнимают код символа '0' (нуль), следовательно результатом будет сама введенная цифра (а не её ASCII-код). А потом увеличивают элемент массива с индексом, соответствующим введенной цифре, на единицу.

Guest 08-09-2004 02:28 204059

То есть, как я понял, ascii значение переэтовает в двоичный код, пересылается в регистер, отнимается от туда 0, и на переменную с перезаписывается уже не ascii код цифры, а двоичный код этой цифры?
Никогда и нигде не происходит обратного преобразования в ascii?

hasherfrog 08-09-2004 12:07 204060

Guest
(c – '0') - вычисление числа из ascii-кода цифры.
(ndigit[c – '0']) - обращение к ячейке массива, соответствующей цифре.
(++ndigit[c – '0'];) - увеличение этой ячейки на 1.
Т.о. идёт подсчёт количества встреченных ascii-кодов, соответствующих каждой цифре 0-9, т.е. для каждой цифры свой счётчик.


Время: 02:03.

Время: 02:03.
© OSzone.net 2001-