2014-02-13 3 views
1

Я работаю над алгоритмом для проекта, и я натолкнулся на какой-то код, который, по моему мнению, может оказаться полезным. Однако, когда я пытаюсь прочитать код, мне трудно понять заявление в коде. Вот код.Значение выражения С, содержащей char arrays

int firstWord[MAX_WORD_SIZE] = {0}, c = 0; 

while (word1[c] != '\0') //word1 is char[] sent as a parameter 
{ 
    firstWord[word1[c]-'a']++; 
    c++; 
} 

Я понимаю (я правильно надеюсь), что первая строка является создание целочисленного массива моего максимального размера, и инициализация элементов к нулю вместе с созданием начального значения счетчика «с» равен нулем.

Я понимаю, что цикл, пока цикл через все символы в word1[] массиве, пока он не попадает в окончательный CHAR '\0'

я запутался на линии firstWord[word1[c]-'a']++; word1[c] должен дать символ, так что же делать -'a' делать? Означает ли это, что char имеет целое число, которое позволит вам получить доступ к элементу массива firstWord[] и увеличить его с помощью ++? Если да, то какой элемент или целое задается word1[c]-'a'

+1

[** Эта таблица **] (http://www.asciitable.com) может помочь вам лучше понять это выражение. – WhozCraig

+1

Посмотрите на столбец с надписью 'dec' рядом с буквами в таблице. Затем подумайте о выполнении математики (вычитание в этом случае). – WhozCraig

+1

Спасибо, извините, что я удалил свой комментарий, когда понял, что у меня вопрос буквально сразу после того, как я спросил вас. Спасибо за вашу помощь! –

ответ

1

Это программа, которая подсчитывает количество букв a до z от слова. Ключевым моментом здесь является то, 'a' - 'a' имеет значение 0 и 'b' - 'a' имеет значение 1 и т.д.

Например, если word1[c] это буква 'd', то 'd' - 'a' является 3, так что это будет увеличивать firstWord[3]. Когда слово было итерационным символом по символу, firstWord[3] содержит число слов 'd' в слове.

+0

Спасибо за четкий ответ, так же как и на следующий вопрос, было бы лучше, если бы у моего массива firstWord [] был установлен исходный размер 26, а не мой MAX_WORD_SIZE, который бывает 30? –

+0

@JoshEngelsma Если некоторые символы, следующие за '' z'' в ASCII, также учитываются, я думаю, что вы правы. –

+0

OK круто спасибо за помощь! –

1

кажется, этот код делает письмо подсчитывать

1 так, что это делает -'a»делать?

, если слово1 [с] 'а', то слово1 [с] - 'а' 0

2. Означает ли это символ char на целое число, которое позволит вам получить доступ к элементу массива firstWord [] и прирастить с помощью ++?

да, это целое число, Promotion

3 .Если так, что элемент или целое число, задается word1 [с] - 'а'

, если слово1 [с] 'а', то слово1 [ c] - 'a' is 0

+0

Привет, см. Мое предыдущее редактирование этого ответа для фиксированной уценки форматирования. – Potatoswatter

2

word1 [c] - 'a' означает разницу между символом в c-й позиции слова1 и целым значением 'a'. В основном он вычисляет количество вхождений букв в слово.

Таким образом, если слово1 [c] равно 'b', тогда значение слова1 [c] - 'a' будет ('b' - 'a') = 1. Таким образом, количество вхождений 'b' в слово будет увеличиваться на 1.

Смежные вопросы