Как я могу использовать указатели в C, чтобы показать, сколько вхождений каждой буквенной буквы появляется в массиве?

Я создаю небольшое приложение ANSI C с использованием GCC в Ubuntu. В настоящее время у меня есть два исходных файла C и один файл заголовка, уже созданный (я обязан сделать это моим профессором лаборатории).

Мой "основной" файл C:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "alphaStats.h"

int main(void) {
    int ABStats[26] = { 0 };
    int *pABStats = ABStats;
    char *pAr = Ar;

    GetFrequency(pAr, pABStats);

    return EXIT_SUCCESS;
}

Мой заголовочный файл alphaStats.h:

#include "alphaStats.c"

char Ar[] = {"All Gaul is divided into three parts, one of which the Belgae inhabit, the Aquitani another, those who in their own language are called Celts, in our Gauls, the third. All these differ from each other in language, customs and laws. The river Garonne separates the Gauls from the Aquitani; the Marne and the Seine separate them from the Belgae. Of all these, the Belgae are the bravest, because they are furthest from the civilization and refinement of [our] Province, and merchants least frequently resort to them, and import those things which tend to effeminate the mind; and they are the nearest to the Germans, who dwell beyond the Rhine , with whom they are continually waging war; for which reason the Helvetii also surpass the rest of the Gauls in valor, as they contend with the Germans in almost daily battles, when they either repel them from their own territories, or themselves wage war on their frontiers. One part of these, which it has been said that the Gauls occupy, takes its beginning at the river Rhone ; it is bounded by the river Garonne, the ocean, and the territories of the Belgae; it borders, too, on the side of the Sequani and the Helvetii, upon the river Rhine , and stretches toward the north. From 'Caesar's Conquest of Gaul', Translator. W. A. McDevitte. Translator. W. S. Bohn. 1st Edition. New York. Harper & Brothers. 1869. Harper's New Classical Library. Published under creative commons and available at http://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:1999.02.0001"};

int GetFrequency(char*, int*);
void DisplayVHist(int*, int);

Мой исходный файл alphaStats.c:

int GetFrequency(char *pAr, int *pABStats) {
    int counter, chNum = 0, i;
    char ch = 'A';

    for (*pAr = pABStats; *pAr != '\0'; *pAr++) {
        chNum = isalpha(*pAr) ? (toascii(toupper(*pAr)) - ch++) : -1;
        if (*pAr == chNum)
            counter++;
    }
    printf("%d", chNum);
}

void DisplayVHist(int *pABStats, int size) {

}

Моя цель - использовать указатели C (*pAr и *pABStats) для перебора массива char (который называется Ar) и печати того, как часто буквы AZ появляются в массиве char Ar. В этот момент у меня возникли проблемы с кодированием функции GetFrequency(). Я понимаю, как использовать цикл for с индексом для поиска и печати содержимого, но я новичок в программировании на C и у меня возникают проблемы с использованием указателей.

Любая помощь будет отличной. Заранее спасибо.

2 ответа

int GetFrequency(char *pAr, int *pABStats) {
    int chNum = 0;

    for (; *pAr != '\0'; ++pAr) {
        if(isalpha(*pAr)){
            chNum = toupper(*pAr) - 'A';
            ++pABStats[chNum];
        }
    }
}

int main(void) {
    int ABStats[26] = { 0 };

    GetFrequency(Ar, ABStats);

    return EXIT_SUCCESS;
}

Стоит отметить, что в main функция, char *pAr = &Ar; & int *pABStats = &ABStats; это не то, что вы хотите. поскольку Ar это массив символов и это базовый адрес, который нужно назначить указателю pArт.е. char *pAr = Ar

Другие вопросы по тегам