我想计算文件中的单词数。我使用双指针将文本的每一行存储在文件中,然后操纵它执行其他操作。
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]中的字符串的指针数吗?我该如何解决?
答案 0 :(得分:0)
您的代码中有几个问题;最明显的一个可能是循环Clipboard API
,其中将第for (i = 0; i <= strlen(str[i]); i++)
个字符串的长度与i
的值进行比较,然后使用相同的i
访问第i
个字符串的字符。所有这些几乎都没有道理。
我将从两件事开始:
首先,请确保您不访问未初始化的行,即考虑使用i
。一种简单的方法是使其成为全局变量或在lineCount
中返回它;签名将更改为readFile
第二,使用两个嵌套循环:
int readFile(char **str) { ....; return lineCount; }