问题描述:文字研究员需统计某篇英文说中某特定单词出现次数位置试写出实现目标文字统计系统称文学研究助手
算法输入:文文件词集
算法输出:单词出现次数出现位置行行号(行出现两次输出行号)
Input
输入第行说文件名(包含路径文文件名)第二行正整数n表示查找单词数(nOutput
输出n块块中第行查找单词第二行开始找行行号列号行号列号占行行出现次输出行号列号占行输出序行号序排列没找块输出第行单词Sample Input
e\1txt
4
1110
ababc
12345
end
Sample Output
1110
row1col10
row2col311
ababc
row1col19
12345
end
row3col1
文件容:
abcdefg 11110 ababababc
aw11100011111000abc
end
写程序实现问题求愿兴趣起探讨
#include #include #define MAXSTRLEN 255 串长
typedef char SString[MAXSTRLEN+1] 串定长序存储表示0号单元存放串长度
int next[MAXSTRLEN] KMP算法中next
void get_next(SString Tint next[]) 求next值
{
int j1k0
next[1]0
while(j{
if(k0||T[k]T[j])
{
++j++k
if(T[j]T[k]) next[j]k
else next[j]next[k]
}
else knext[k]
}
}
int Index(SString SSString Tint pos) KMP算法
{
int iposj1
while(i{
if(j0||S[i]T[j]) {++i++j}
else
jnext[j]
}
if (j>T[0]) return (iT[0])
else
return 0
}
int lenth(SString str) 求串长
{
int i1
while(str[i]) i++
return(i1)
}
void find(char name[]SString keys) 查找函数该函数整程序重部分输入
{ 查找关键字说文件中逐行读取字符串查找
SString text 存放说文件读取行字符串
int i1j0k i存放行号j存放列号k输出格式控制FILE *fp
if ((fp(fopen(namer)))) 开说文件
{
printf(Open file error\n)
exit(0)
}
keys[0]lenth(keys) 求关键字长度
get_next(keysnext) 求模式串(关键字)字符应next 值
printf(s\n&keys[1]) 印关键字
while (feof(fp)) 果没说文件末尾
{
k0
fgets(&text[1]MAXSTRLENfp) 说文件中读取行字符串存入text串中
text[0]lenth(text) 求读入串长度
jIndex(textkeysj+1) 调KMP算法统计关键字该行出现位置匹配成功返回0
if (j0)
{printf(rowdcoldij) k++} 匹配成功印行号列号 while(j0) 该行找关键字继续寻找否匹配成功
{
jIndex(textkeysj+1) 调KMP算法刚找列号字符起匹配 if (j0)
{printf(dj) } 匹配成功印列号
}
i++ 行号加1行中寻找
if (k) printf(\n) 输出格式控制
}
}
void main()
{
char name[50] 存储输入说路径字符串
SString words[10] 定义字符串数组存储输入关键字
int ni
printf(Please input the name of the novel\n)
scanf(sname)
printf(How many words do you want to find(nscanf(d&n)
printf(Please input the words you want to find\n)
for (i0iscanf(s&words[i][1]) 户次性输入查找关键字
words[i][0]存放字符串长度
for (i0ifind(namewords[i]) 关键字调查找函数进行查找统计
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档