?? wenxue.cpp
字號:
#define MAXSIZE 1000 //字符空間最大容量
#define MAXLEN 20 //單詞最大長度
#define MAXNUM 16 //一行中單詞最多個數
#include "stdio.h"
#include "stdlib.h"
typedef struct{ //單詞類型
char word[MAXLEN]; //生成單詞的字符空間
int len; //單詞長度
}WordType;
struct { //文章中一行單詞組成的有序鏈表
WordType data;
}Sequence[MAXNUM];
struct Node { //待查單詞所在行號和指向下一個位置的指針
int line;
struct Node *next;
}Node,*link[MAXNUM];
struct { //待查單詞組成的有序鏈表
WordType data;
int count;
struct Node *next;
}HeadNode[MAXNUM];
int ExtractWords(char s[MAXSIZE])
{ //從文章中提取一行單詞并將其組成一有序單詞鏈表,每個單詞作為一個結點
//并返回該行單詞個數
int i,j,k;
j=1;
for(i=0;s[i]!='\0';)
{for(;(!((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')))&&(s[i]!='\0');)
i++;
for(k=1;((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))&&(s[i]!='\0');)
{Sequence[j].data.word[k]=s[i];
k++;i++;}
Sequence[j].data.len=k-1;
j++;}
return(j-1);
}
int InputWords()
{ //輸入待查單詞并組成有序鏈表,每個單詞作為一個結點
//單詞之間以任意非字母字符間隔,以“Enter”鍵結束,并返回輸入單詞個數
int i,j,k;
char s[MAXSIZE]={'\0','\0'};
j=1;i=0;
printf("請輸入要查詢的單詞(以Enter結束):\n");
s[i]=getchar();
do{i++;
scanf("%c",&s[i]);
}while(s[i]!='\n');
for(i=1;s[i]!='\0';i++)
{for(;!((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'));) i++;
for(k=1;(s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z');)
{HeadNode[j].data.word[k]=s[i];
k++;i++;}
HeadNode[j].data.len=k-1;
j++;}
return(j-1);
}
int WordCmp(WordType wd1,WordType wd2)
{ //單詞比較,若相等返回“0”
int k=1;
while(k<=wd1.len&&k<=wd2.len){
if(wd1.word[k]==wd2.word[k]) k++;
else if(wd1.word[k]<wd2.word[k]) return(-1);
else return(1);}
if(wd1.len==wd2.len) return(0);
else if(wd1.len<wd2.len) return(-1);
else return(1);
}
void OutResult(int n)
{ //輸出待查單詞及其出現次數和所在行號
int i,j;
for(i=1;i<=n;i++){
printf("單詞");
for(j=1;j<=HeadNode[i].data.len;j++)
printf("%c",HeadNode[i].data.word[j]);
printf("在文章中出現%d次 ",HeadNode[i].count);
if(HeadNode[i].count!=0){
printf("分別在第");
for(link[i]=HeadNode[i].next;link[i]->next!=NULL;link[i]=link[i]->next)
printf("%d ",link[i]->line);
printf("行");}
printf("\n");
}
}
void main()
{ //主函數
int linenum=0;
int m,n,i,j;
int num=0;
char filename[10];
char str[MAXSIZE];
FILE *fp;
printf("請輸入文章名:");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
{printf("cannot open the file!");
exit(0);}
for(i=1;i<=MAXNUM;i++){ //初始化
link[i]=(struct Node *)malloc(sizeof(struct Node));
HeadNode[i].next=link[i];
link[i]->next=NULL;
HeadNode[i].count=0;
}
m=InputWords();
for(;!feof(fp);)
{fgets(str,MAXSIZE,fp);
n=ExtractWords(str); //從文章中提取一行單詞,并組成有序鏈表
linenum++; //記錄當前行號
for(i=1;i<=m;i++){
num=0;
for(j=1;j<=n;j++){
if((WordCmp(HeadNode[i].data,Sequence[j].data))==0)
{ HeadNode[i].count++; //單詞出現次數
num++;}}
if(num!=0){ //記錄待查單詞出現的行號
link[i]->line=linenum;
link[i]->next=(struct Node *)malloc(sizeof(struct Node));
link[i]=link[i]->next;
link[i]->next=NULL;}}}
OutResult(m);
fclose(fp);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -