1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
<span style= "color: rgb(255, 153, 0); background-color: rgb(255, 255, 255);" >本程序用C语言实现单词的识别,包含一些C++语言的一些用法,主要的函数有单词识别函数、存储函数、冒泡排序挑出此处最高的十个单词,本程序可以识别英文单词和标点符号,</span><br><span style= "color: rgb(255, 153, 0);" >该程序的数据类型大多用的数组和字符串类型,<br><span style= "color: rgb(51, 102, 255);" >源程序:</span></span><br>#include<stdio.h>
#include<stdlib.h> #include<string> #include<iostream> using
namespace std;
string s[100]; int b[100];
long
f;
<span style= "background-color: rgb(51, 102, 255);" > //***排序查询频率最高的十个单词***
</span> void
paixu( int
b[])
{ int
i=f-1;
int
y;
string x; cout<<f<<endl; while (i>f-10)
{ int
l=0;
for ( int
j=0;j<i;j++)
if (b[j]>b[j+1])
{ y=b[j]; b[j]=b[j+1];
b[j+1]=y;
x=s[j];
s[j]=s[j+1];
s[j+1]=x;
l=j;
} i=l; } cout<< "出现次数最高的十个单词:" <<endl;
for (i=1;i<=10;i++)
{ cout<<s[f-i]<< " " <<b[f-i]+1<<endl;
} } <span style= "background-color: rgb(51, 102, 255);" > //**********存储单词,比较是否重复*********
</span> int
af( char
e[])
{ int
i,k=0;
string l; string p= "\0" ;
//s[0]="a"; char
*v;
for (i=0;(l=s[i])!=p;i++)
{ if ( strcmp (e,s[i].c_str())==0)
{ b[i]+=1;
k=1;
return
1;
}
} if (k==0)
{ if (s[i]==p)
{ v=e;
s[i]=v;
}
else
{ v=e;
s[i+1]=v;
}
f++;
return
0;
} } <span style= "background-color: rgb(51, 102, 255);" > //*******识别单词******************
</span> void
shibie1( char
d[])
{ char
h,m,a;
int
j=0,y=0;
char
c[30];
for ( int
i=0;(m=d[i])!= ‘\0‘ ;i++)
{ a=m;
if (a>= ‘a‘ &&a<= ‘z‘ ||a>= ‘A‘ &&a<= ‘Z‘ )
{ c[j]=a;
j++;
} else
if (a>= ‘0‘ &&a<= ‘9‘ )
{ c[j]=a;
j++;
} else { y=af(c);
puts (c);
for (j=0;(h=c[j])!= ‘\0‘ ;j++)
c[j]= ‘\0‘ ;
j=0;
c[j]=a;
y=af(c);
puts (c);
c[0]= ‘\0‘ ;
} if (d[i+1]== ‘\0‘ )
{ y=af(c);
puts (c);
} } } <span style= "background-color: rgb(51, 102, 255);" > //****主函数,输入文件*****
</span> int
main()
{ FILE
*fp;
char
ch,filename[10];
int
i=0,p=0;
char
d[30];
f=0; printf ( "请输入所用文件名:" );
scanf ( "%s" ,filename);
if ((fp= fopen (filename, "r" ))==NULL)
{ printf ( "无法打开此文件\n" );
exit (0);
} for (i=0;i<30;i++)
d[i]= ‘\0‘ ;
while (! feof (fp))
{ ch= fgetc (fp);
if (ch!= ‘\n‘ &&ch!= ‘ ‘ )
{ d[p]=ch; p++;
} if ((ch== ‘\n‘ ||ch== ‘ ‘ )&&d[0]!= ‘\0‘ )
{ shibie1(d);
p=0;
for (i=0;i<30;i++)
d[i]= ‘\0‘ ;
} } if (d[0]!= ‘\0‘ )
shibie1(d); paixu(b); fclose (fp);
return
0;
} <br>编程体会:本程序只用了c的基本数据类型,整个过程看起来挺乱的,识别的单词用字符串存放,定义的小了容易超出空间,不能处理中文,在处理300k以上文件的时候速度会明显降低,<br>这个程序做了两天左右,有一天的时间是在调试程序,对程序语言的应用理解不透,犯了错误都不知道怎么改。对程序语言还要加深理解,学会应用一些集成的函数,方便编程。 |