i = 0; while (fscanf(artin, "%s", article[article_page].webid) != EOF) // 读取网页标识号 { fgetc(artin); // 读取换行符 while ((temp[i] = fgetc(artin)) != EOF) // 从文件中读入一个字符 { if ((temp[i] >= 97 && temp[i] <= 122) || (temp[i] >= 65 && temp[i] <= 90)) // 读到字母 { if (temp[i] >= 65 && temp[i] <= 90) // 把大写字母换成小写字母 { temp[i] = tolower(temp[i]); } i++; } else if (temp[i] != '\f' && i != 0) // 读到符号且前方读到单词 { temp[i] = '\0'; if (search_from_stopword(temp) == 0) // 判断是否是停用词 { article_insertHash(temp); // 不是停用词则插入哈希表 } i = 0; continue; } else if (temp[i] != '\f' && i == 0) // 读到符号且前方未读到单词 { if (search_from_stopword(temp) == 0) // 判断是否是停用词 { article_insertHash(temp); // 不是停用词则插入哈希表 } continue; } else // 读到换页符 { article_page++; i = 0; break; }
时间: 2024-02-10 11:11:47 浏览: 60
read_bb_file.rar_Linux/Unix编程_Unix_Linux_
好的,下面是修改后的代码:
```
int i = 0;
char temp[MAX_WORD_LENGTH];
while (fscanf(artin, "%s", article[article_page].webid) != EOF) // 读取网页标识号
{
fgetc(artin); // 读取换行符
while (fgets(temp, MAX_WORD_LENGTH, artin)) // 从文件中读入一行
{
char* word = strtok(temp, " \n\t\r"); // 使用空格、换行、制表符作为分隔符,获取单词
while (word != NULL)
{
for (int j = 0; j < strlen(word); j++) // 将单词中的大写字母转换为小写字母
{
if (word[j] >= 65 && word[j] <= 90)
{
word[j] = tolower(word[j]);
}
}
if (search_from_stopword(word) == 0) // 判断是否是停用词
{
article_insertHash(word); // 不是停用词则插入哈希表
}
word = strtok(NULL, " \n\t\r"); // 获取下一个单词
}
if (feof(artin)) // 判断是否读到文件结尾
{
break;
}
}
article_page++;
}
```
修改说明:
1. 将读取文件中的一个字符改为读取文件中的一行;
2. 使用 `strtok()` 函数获取单词,并使用空格、换行、制表符作为分隔符;
3. 将单词中的大写字母转换为小写字母;
4. 判断单词是否为停用词,并插入哈希表;
5. 判断是否读到文件结尾。
阅读全文