YIKOUCUSO4 2021-06-08 23:15 采纳率: 50%
浏览 54
已采纳

c++链表统计英文文本。求代码,谢谢!

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-06-09 02:06
    关注

    第一是逐行读取文件,根据空格拆分单词

    第二是链表检索单词,找到则该节点的计数器加一,找不到则加新节点

    第三是节点有序插入,比较节点单词大小插入合适位置

    第四是节点数据结构,串记录单词,整型为计数器,创建新节点时计数器为1

    #include <string>
    #include <iostream>
    #include <stdio.h>
    #include <fstream>
    using namespace std;
    typedef struct _NODE
    {
    	string word;
    	int count;
    	_NODE *next;
    }NODE,*PNODE;
    
    PNODE head = NULL;
    
    PNODE searchString(string word)
    {
    	PNODE p = head;
    	while(p != NULL)
    	{
    		if(p->word == word)
    			return p;
    		p = p->next;
    	}
    	return NULL;
    }
    
    PNODE addNode(string word)
    {
    	PNODE p = searchString(word);
    	if(p != NULL)
    		p->count++;
    	else
    	{
    		p = new NODE;
    		p->word = word;
    		p->count = 1;
    		p->next = NULL;
    		//
    		if(head == NULL || word < head->word)
    		{
    			p->next = head;
    			head = p;
    			return head;
    		}
    		else
    		{
    			PNODE q = head;
    			PNODE prev = q;
    			while(q != NULL)
    			{
    				if(word < q->word)
    				{
    					p->next = q;
    					prev->next = p;
    					break;
    				}
    				prev = q;
    				q = q->next;
    			}
    			if(q == NULL)
    				prev->next = p;
    		}
    	}
    	return head;
    }
    
    void print()
    {
    	PNODE p = head;
    	while(p != NULL)
    	{
    		cout<<p->word<<"  "<<p->count<<endl;
    		p = p->next;
    	}
    }
    
    void main()
    {
    
    	ifstream file("D:\\textfile.txt");
    	if(!file.is_open())
    	{
    		cout<<"can't open this file"<<endl;
    		return;
    	}
    	char buf[1024];
    	while(!file.eof())
    	{
    		file.getline(buf,1024);
    		char *p= strtok (buf, " ,!." );
    		while(p != NULL)
    		{
    			head = addNode(p);
    			p= strtok (NULL, " ,!." );
    		}
    	}
    	file.close();
    	//
    	print();
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大