Как посчитать количество слов, хранящихся в двойном указателе - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу посчитать количество слов в файле.Я сохраняю каждую строку текста в файле с помощью двойного указателя, а затем манипулирую им для других целей.

char **create2DArray()
{
    int i = 0;

    char **str = malloc(sizeof(char *) * 100);

    for (i = 0; i < 100; i++)
    {
        str[i] = malloc(sizeof(char) * 1000);
    }
    return str;
}

char **readFile(char **str)
{
    int i = 0;
    FILE *pFile;
    char *filename = "C:\\Users\\muham\\OneDrive\\Documents\\A2\\A2 Samples\\sample1.txt";

pFile = fopen(filename, "r");

if (pFile == NULL)
{
    printf("Could not open file");
    exit(1);
}

while (fgets(str[i], 1000, pFile) != NULL)
{
    RemoveReturn(str[i]);
    lineCount++;
    printf("%s\n", str[i]);
    i++;
}
fclose(pFile);
return str;
}
int wordCount(char **str)
{
    int wordCounting = 0;
    int i = 0;
    int q = 0;

    for (i = 0; i < lineCount; i++)
    {
        for (q = 0; q <= strlen(str[i]); q++)
        {
            if (*str[q] == ' ' || *str[q] == '\0')
            {
                wordCounting++;
            }
            if (*str[q] == ' ' && *str[q + 1] == ' ' && *str[0] != ' ')
            {
                wordCounting--;
            }
            if (*str[0] == ' ')
            {
                wordCounting--;
            }
            if (*str[q] == ' ' && *str[q + 1] == '\0')
            {
                wordCounting--;
            }
            if (strlen(str[q]) == 0)
            {
                wordCounting--;
            }
            }
    }
printf("%d\n", wordCounting);
return wordCounting;
}

На данный момент, когда я запускаю программу, wordCount печатает 0. Почему это происходит?Это потому, что я перебираю количество указателей с str [i], а не строки, хранящиеся в str [i]?Как мне это исправить?

1 Ответ

0 голосов
/ 11 февраля 2019

В вашем коде есть несколько проблем;Наиболее очевидным является, вероятно, ваш цикл for (i = 0; i <= strlen(str[i]); i++), в котором вы сравниваете длину i -ой строки со значением i, и вы используете тот же i для доступа к символам i СтрокаЭто редко имеет смысл.

Я бы начал с двух вещей:

Во-первых, убедитесь, что у вас нет доступа к неинициализированным строкам, т. Е. Рассмотрите lineCount.Простым способом было бы сделать его либо глобальной переменной, либо вернуть ее в readFile;сигнатура изменится на int readFile(char **str) { ....; return lineCount; }

Во-вторых, используйте два вложенных цикла:

for (int line=0; line<lineCount; line++) {
   for (int column=0; column < strlen(str[line]); column++) {
     // your code for detecting lines goes here...
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...