Как решить эту задачу, используя массив char'ов?
Ну... читайте по одному символу. Можно считать, допустим, начала слов. Что такое начало слова? Это символ-буква, перед которым стоит не буква. Все, что вам надо хранить - это был ли буквой предыдущий символ. Если предыдущий не был, а текущий - является, то прибавляете 1 к ответу. Еще надо аккуратно рассмотреть случай слова в самом начале (т.е. фактически прибавляете 1 если текущий - буква и позиция == 0 или предыдущий символ - не буква).
1. Нельзя объявить обычный массив, не зная заранее количество элементов. Надо использовать вектор/динамический массив/тип string. 

2. std::isalpha(std::locale)