如何计算双指针中存储的单词数

时间:2019-02-10 22:52:13

标签: c pointers

我想计算文件中的单词数。我使用双指针将文本的每一行存储在文件中,然后操纵它执行其他操作。

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 :(得分:0)

您的代码中有几个问题;最明显的一个可能是循环Clipboard API,其中将第for (i = 0; i <= strlen(str[i]); i++)个字符串的长度与i的值进行比较,然后使用相同的i访问第i个字符串的字符。所有这些几乎都没有道理。

我将从两件事开始:

首先,请确保您不访问未初始化的行,即考虑使用i。一种简单的方法是使其成为全局变量或在lineCount中返回它;签名将更改为readFile

第二,使用两个嵌套循环:

int readFile(char **str) { ....; return lineCount; }