高分求一个C语言数据结构程序题

输入一篇文章(文章中可能有多个空格,回车符及标点符号),统计出现的每个英文单词及在文章中出现的次数,程序必须在一篇文章输入后就输出所有结果.(即所有的单词及出现次数).

必须用以下方法完成:
建立链表,链表中每个节点的数据域有两个值,一个储存出现的英文单词,一个储存数字表示单词出现次数.(出现之前没有过的新单词时开辟新节点,出现相同单词时储存这个单词的节点数据域中保存单词个数的值加1)
最后便历整个链表,输出单词和出现次数
程序语言:C语言,不得出现iostream,namespace,class等C++中的语句~!!!

算法不用在这里告诉我了,我基本上都知道,只是实现上游点问题,高分求得是一个能运行的纯C语言程序.
复制党绕行~!

#include <stdlib.h>
#include <conio.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<windows.h>
#include<iostream.h>
void menu()
{
system("cls");
printf("********************文本读取与查询********************\n");
printf("1.统计文本中单词的个数\n");
printf("2.输入指定的单词或短语查找它的出现次数\n");
printf("3.输入指定的单词或短语替换\n");
printf("4.推出\n");
printf("请输入选择:");
}
class Text
{
public:
void birth()
{
FILE *fp;
char ch;
int i,j,n;
fp=fopen("text.txt","rb+");
for(i=0;i<1000;i++)
{
for(j=0;j<1000;j++)
{
ch=fgetc(fp);
if(ch=='$')
{
n=i;
i=1000;
break;
}
a[i][j]=ch;
if(ch=='.' || ch=='?' || ch=='!')
{
break;
}
}
}
fclose(fp);
}
int find()
{
int i,j,m=0;
for(i=0;i<1000;i++)
{
for(j=0;j<1000;j++)
{
if(a[i][j]==' ')
{
m++;
}
else if(a[i][j]=='.')
{
m++;
break;
}
}
}
return m;
}
void findwords(char *b)
{
char c[1000],chb,chc;
int m,i,j,s,l,x;
m=0;
s=strlen(b);
for(i=0;i<1000;i++)
{
x=0;
for(j=0;j<1000;j++)
{
if(a[i][j]=='.' || a[i][j]=='?' || a[i][j]=='!')
{
if(x!=0)
{
print(i,j,s,x,1);
}
break;
}
if(abs(b[0]-a[i][j])%32==0 && a[i][j-1]==' ')
{
chb='\0';
chc='\0';
if(a[i][j+s]==' ' || a[i][j+s]==',' || a[i][j+s]=='.' || a[i][j+s]=='?' || a[i][j+s]=='!' || a[i][j+s]==':' || a[i][j+s]==';')
{
for(l=0;l<s;l++)
{
c[l]=a[i][j+l];
}
for(l=0;l<s;l++)
{
chb=chb+b[l];
}
for(l=0;l<s;l++)
{
chc=chc+c[l];
}
if(abs(chb-chc)%32==0)
{
m++;
print(i,j,s,x,0);
x=j+s+1;
}
}
}
if(abs(b[0]-a[i][j])%32==0 && a[i][j-1]=='\0')
{
chb='\0';
chc='\0';
if(a[i][j+s]==' ' || a[i][j+s]==',' || a[i][j+s]=='.' || a[i][j+s]=='?' || a[i][j+s]=='!' || a[i][j+s]==':' || a[i][j+s]==';')
{
for(l=0;l<s;l++)
{
c[l]=a[i][j+l];
}
for(l=0;l<s;l++)
{
chb=chb+b[l];
}
for(l=0;l<s;l++)
{
chc=chc+c[l];
}
if(abs(chb-chc)%32==0)
{
m++;
print(i,j,s,x,0);
x=j+s+1;
}
}

}
}
}
printf("该单词或短语出现的次数:");
printf("%d\n",m);
}
void exchange(char *b,char *bb)
{
char c[1000],chb,chc;
int m,i,j,s,l,x;
m=0;
s=strlen(b);
for(i=0;i<1000;i++)
{
x=0;
for(j=0;j<1000;j++)
{
if(a[i][j]=='.' || a[i][j]=='?' || a[i][j]=='!')
{
if(x!=0)
{
print(i,j,s,x,1);
}
break;
}
if(abs(b[0]-a[i][j])%32==0 && a[i][j-1]==' ')
{
chb='\0';
chc='\0';
if(a[i][j+s]==' ' || a[i][j+s]==',' || a[i][j+s]=='.' || a[i][j+s]=='?' || a[i][j+s]=='!' || a[i][j+s]==':' || a[i][j+s]==';')
{
for(l=0;l<s;l++)
{
c[l]=a[i][j+l];
}
for(l=0;l<s;l++)
{
chb=chb+b[l];
}
for(l=0;l<s;l++)
{
chc=chc+c[l];
}
if(abs(chb-chc)%32==0)
{
m++;
for(l=j;l<j+s;l++)
{
a[i][l]=bb[l-j];
}
print(i,j,s,x,0);
x=j+s+1;
j=j+s+1;
}
}
}
if(abs(b[0]-a[i][j])%32==0 && a[i][j-1]==' ')
{
chb='\0';
chc='\0';
if(a[i][j+s]==' ' || a[i][j+s]==',' || a[i][j+s]=='.' || a[i][j+s]=='?' || a[i][j+s]=='!' || a[i][j+s]==':' || a[i][j+s]==';')
{
for(l=0;l<s;l++)
{
c[l]=a[i][j+l];
}
for(l=0;l<s;l++)
{
chb=chb+b[l];
}
for(l=0;l<s;l++)
{
chc=chc+c[l];
}
if(abs(chb-chc)%32==0)
{
m++;
for(l=j;l<j+s;l++)
{
a[i][l]=bb[l-j];
}
print(i,j,s,x,0);
x=j+s+1;
j=j+s+1;
}
}
}
}
}
printf("该单词或短语出现的次数:");
printf("%d\n",m);
}
void print(int i,int x,int y,int z,int k)
{
int j;
if(k==0)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
for(j=z;j<x;j++)
{
printf("%c",a[i][j]);
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);
for(j=x;j<x+y;j++)
{
printf("%c",a[i][j]);
}
printf(" ");
}
if(k==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
for(j=z;j<=x;j++)
{
printf("%c",a[i][j]);
}
printf("\n");
}
}
private:
char a[1000][1000];
};
void main()
{
Text text;
int j,choice;
char s[1000],ss[1000],con;
r1: menu();
text.birth();
cin>>choice;
if(choice==1)
{
system("cls");
j=text.find();
printf("单词出现的次数:");
printf("%d\n",j);
printf("你想继续吗?");
con=getch();
if((con=='Y') || (con=='y'))
{
goto r1;
}
if((con=='N') || (con=='n'))
{
return;
}
}
if(choice==2)
{
r2: system("cls");
printf("请输入所要查询的单词或短语:");
gets(s);
text.findwords(s);
printf("你想继续吗?");
con=getch();
if((con=='Y') || (con=='y'))
{
goto r2;
}
if((con=='N') || (con=='n'))
{
goto r1;
}
}
if(choice==3)
{
r3: system("cls");
printf("请输入要替换的单词");
gets(s);
printf("请输入所替换的单词");
gets(ss);
text.exchange(s,ss);
printf("你想继续吗?");
con=getch();
if((con=='Y') || (con=='y'))
{
goto r3;
}
if((con=='N') || (con=='n'))
{
goto r1;
}
}
if(choice==4)
{
system("cls");
printf("你想退出吗?");
con=getch();
putchar(10);
if((con=='Y') || (con=='y'))
{
return;
}
if((con=='N') || (con=='n'))
{
goto r1;
}
}
}
说明要在工程下创建一个文件text.txt把要读的东西放在里面就可以了
温馨提示:内容为网友见解,仅供参考
无其他回答

一个有关C语言(数据结构)程序设计题 高手请帮忙,高分!
base[rear]=e;rear=(rear+1)%QUEUE_SIZE;} void DeQueue(int &e){ e=base[front];front=(front+1)%QUEUE_SIZE;} public:int *base;int front;int rear;};\/\/图G中查找元素c的位置 int Locate(MGraph G,char c){ for(int i=0;i<G.vexnum;i++)if(G.vexs[i]==c) return i;re...

一份C语言的数据结构题目,急求答案
{top--;p=NULL;} else if(top>0){s[top].tag=1;p=s[top].pp;p=p->rchild;} } }

数据结构(C语言版),求高手解决。。
1.二叉树是度为2的有序树( )【答案】× 2.完全二叉树一定存在度为1的结点( )【答案】× 3.深度为K的二叉树中结点总数≤2k-1( )【答案】√ 4.由一棵二叉树的先序序列和后序序列可以惟一确定它( )【答案】× 5.完全二叉树中,若一个结点没有左孩子,则它必是树叶...

用C语言编程,数据结构题 要快!答的好再加更多悬赏
while(p&&jnext;++j;} q= (link)malloc(sizeof(LNode));q->date=e;q->next=p->next;p->next=q;return 1;} \/\/\/ \/\/\/*显示数据*\/\/\/ \/\/\/ void show(link l){ link p; int j;p=l;j=0;printf("链表的值为:\\n");while(p->next){ printf("%d\\n",p->next->date);p...

关于数据结构的问题,用C语言描述
采用一种数据结... 1. 设一函数 f(x,y)=(1+A*(e^B\/cosθ)*(1+C*(cosψ)^2),其中θ=(π*x)\/180,ψ=(π*y)\/180,参数A=-0.5,B=-0.4,C=-0.1。x从0变化到89,步长为1,y从0变化到359,步长为1。采用一种数据结构,完成f(x,y)的存储。2.上题的f(x,y)是实数值,请通过线性变化求出...

数据结构c语言版一道题求解
,element[n - 1]存放线性表中的元素 *\/}; typedef struct SeqList *PSeqList;PSeqList createNullList_seq(int m ) {\/* 创建新的顺序表 *\/ PSeqList palist= (PSeqList)malloc(sizeof(struct SeqList)); if (palist!=NULL){ palist->element= (DataType*)malloc(size...

C语言程序:已知一个班10个学生的成绩,存放在一个一维数组中,要求找出其 ...
include main(){int i,max,a[10];printf("输入十个同学的成绩:");for(i=0;i<=9;i++)scanf("%d",&a[i]);max=0;for(i=0;i<=9;i++)if(a[i]>max)max=a[i];printf("最好成绩为:%d",max);}希望对楼主有帮助,

c语言题型,数据结构题
= pTail->pNext;free(pTail);pTail = NULL;return 1;} pTail = pTail->pNext;pHead = pHead->pNext;} printf("链表中唔该学生!\\n");return 0;} void printInfo(pStu stu){ while(stu = stu->pNext)printf("%s, %d, %c\\n", stu->name, stu->num, stu->sex);} ...

一道C语言里的数据结构问题
这个是计算n趋于无穷大时的阶次,因此阶次从低到高的次序为:31+1\/n , 100n + nlog2(n), 20log2(2^n) + n^2, 2^n + 89n^3

一道数据结构(c语言描述)题,希望大佬帮我看看,萌新不会?
else if(c=='-'){\/\/- t.r=a.r-b.r;t.i=a.i-b.i;} else if(c=='*'){\/\/ t.r=a.r*b.r-a.i*b.i;t.i=a.r*b.i+b.r*a.i;} else if(c=='\/'){\/\/\/ t.r=(a.r*b.r+a.i*b.i)\/(b.r*b.r+b.i*b.i);t.i=(a.i*b.r-a.r*b.i)\/(b.r*b....

相似回答
大家正在搜