Word w[M];//定义单词存储空间
int K, n = 0, i;//K:单词字符数量;n:当前单词序号;i:遍历已有单词
char ch;
fstream fp;
fp.open("C://Infile.txt",ios::in);
while (!fp.eof())
{
fp >> ch;//获取当前字符
if (ch == ' ' || ch == 10 || ch == ',' || ch == '.')
{//遇到空格、回车、逗号、句号则跳过
continue;
}
//逐个读取字母,读到字母以外的字符就停止,记录一个单词
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
K = 0;//单词字符数量
w[n].count = 1;//频率设为1
while ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
{
if (ch >= 'A' && ch <= 'Z')
ch += 32;//大写转换成小写
w[n].word[K] = ch;//把当前字母存入数组
K++;
fp >> ch;
}
w[n].word[K] = '\0';//结束标志\0,防止运行出现烫烫烫
for (i = 0; i < n; i++) //与前面的单词比较
{
if (strcmp(w[n].word, w[i].word) == 0)//如果有单词相同
{
w[i].count++;//此单词频率加1
break;
}
}
if (n == 0 || i == n)//前面如果没有相同的单词
{
//为此单词开辟新单元
n++;
}
}
}
fp.close();
//构造后接方式的单链表
first = new LNode();
first->next = NULL;
LNode* r = first, * s;
for (int i = 0; i < n; i++) { //r为尾指针
s = new LNode();
s->data = w[i];
s->next = NULL;
r->next = s;
r = s;
}
r->next = NULL;
LNode* p = r->next;
while (p) {
cout << "单词" << p->data.word << "出现次数为:" << p->data.count << endl;
p = p->next;
}