#include <malloc.h>
#include <string.h>
#include <iostream>
using namespace std;
typedef struct node{
char data[20];
int count;
struct node *next;
}LNode,*LinkList;
void init(LinkList *L);//初始化链表
void distinguish_count();//截取单词并输入进2单链表,统计了重复个数,并输出链表
void input(LinkList L,char *a);//于dis..函数中帮助实现向链表输入单词,统计重复个数
void print_1(LinkList L);//打印出每个节点的单词与词频
void init(LinkList *L){
(*L)=(LinkList)malloc(sizeof(LNode));
(*L)->next=NULL;
}
void distinguish_count(LinkList L){
FILE *fp;
char arr[20],c;
init(&L);
fp=fopen("Infile.txt","r");
if(fp==NULL)
printf("fall to open!\n");
else{
while(!feof(fp)){//循环到文件结束
printf("test ");
int i=0;
arr[0]={'\0'};
//截取一个单词(大写)
while((c=fgetc(fp)!=EOF)&&c!=' '&&c!=','&&c!='.'&&c!=';'){
//全部大写化
if(c>='a'&&c<='z')
c+=32;
arr[i]=c;
++i;
}
arr[i]={'\0'};
if(arr[0]!='\0')
input(L,arr);
}}
print_1(L);
fclose(fp);
}
//查词频 头插法
void input(LinkList L,char *a){
LinkList P;
LinkList Q;
Q=L->next ;
int flag;
//查重
for(Q=L;Q->next!=NULL;Q=Q->next){
if(stricmp(a,Q->data)==0 ){
Q->count++;
flag=1;
break;
}
}
//头插法
if(flag==0){
P=(LinkList)malloc(sizeof(LNode));
strcpy(P->data,a);
P->count=1;
P->next =L->next ;
L->next =P;
}
}
//打印单词及其词频
void print_1(LinkList L){
LinkList p;
p=L->next;
while(p!=NULL){
cout<<"word:"<<p->data<<" "<<"count:"<<p->count <<endl;
p=p->next;
}
int main(){
LinkList L;
distinguish_count(L);
}
为什么该程序没有报错,但是就是运行打印出来的是一行笑脸,与本身文件内容不符。球球大佬,救救孩子,孩子实训熬不过去了
修改如下,供参考:
#include <malloc.h>
#include <string.h>
#include <iostream>
#include <iomanip>
using namespace std;
typedef struct node{
char data[20];
int count;
struct node *next;
}LNode,*LinkList;
void init(LinkList *L);//初始化链表
void distinguish_count();//截取单词并输入进2单链表,统计了重复个数,并输出链表
LinkList input(LinkList *L,char *a);//于dis..函数中帮助实现向链表输入单词,统计重复个数
void print_1(LinkList L);//打印出每个节点的单词与词频
void init(LinkList *L)
{
(*L)=(LinkList)malloc(sizeof(LNode));
strcpy((*L)->data,"\0");
(*L)->count = 0;
(*L)->next=NULL;
}
void distinguish_count()
{
FILE *fp;
LinkList L;
char arr[20]={0},c;
init(&L);
fp=fopen("Infile.txt","r");
if(fp==NULL){
printf("fail to open!\n");
return;
}
int i=0;
while((c=fgetc(fp))!=EOF){
if(c!=' ' && c!=',' && c!='.' && c!=';' && c!='\\' && c!=':'){
if(c>='a'&&c<='z') c-=32; //全部大写化
arr[i]=c;
i++;
}
else{
if(i!=0){
arr[i]='\0';
L=input(&L,arr);
}
for(i=0;i<20;i++)arr[i]=0;
i=0;
}
}
fclose(fp);
print_1(L);
}
//查词频 头插法
LinkList input(LinkList *L,char *a)
{
LinkList P=NULL,Q=NULL,R;
int flag=0;
for(Q=(*L),R=NULL;Q!=NULL;R = Q,Q=Q->next){ //查重
if(strcmp(Q->data,a)==0 ){
Q->count++;
flag=1;
break;
}
}
if(flag==0){ //头插法
P=(LinkList)malloc(sizeof(LNode));
strcpy(P->data,a);
P->count=1;
if((*L)->next==NULL){
P->next =(*L)->next ;
(*L)->next =P;
}else{
P->next =R->next;
R->next =P;
}
}
return (*L);
}
//打印单词及其词频
void print_1(LinkList L)
{
LinkList p;
p=L->next;
while(p!=NULL){
cout<<"word:"<<setw(20)<<setiosflags(ios::left)<<p->data<<" "<<"count:"<<p->count<<endl;
p=p->next;
}
}
int main()
{
//LinkList L;
distinguish_count();
return 0;
}