在用c语言完整的写一个近似串匹配问题动态规划法代码的基础上,加上文件读入代码,使得可以读入txt文档来录入文本串和模式串
时间: 2024-03-22 16:39:05 浏览: 60
近似串匹配的动态规划算法
3星 · 编辑精心推荐
下面是加入文件读入功能的 C 语言近似串匹配问题动态规划法的完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
int approximate_match(char* text, char* pattern, int k)
{
int n = strlen(text), m = strlen(pattern);
int dp[MAX_LEN][MAX_LEN] = {0};
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (text[i-1] == pattern[j-1]) {
dp[i][j] = dp[i-1][j-1] + 1;
} else {
dp[i][j] = dp[i-1][j-1] - k;
if (dp[i-1][j] > dp[i][j]) {
dp[i][j] = dp[i-1][j];
}
if (dp[i][j-1] > dp[i][j]) {
dp[i][j] = dp[i][j-1];
}
}
}
}
return dp[n][m];
}
int main()
{
char text[MAX_LEN], pattern[MAX_LEN];
int k;
// 读入文本串
FILE *fp = fopen("text.txt", "r");
if (fp == NULL) {
printf("Failed to open file!\n");
return 1;
}
fgets(text, MAX_LEN, fp); // 读取一行
fclose(fp);
// 读入模式串
fp = fopen("pattern.txt", "r");
if (fp == NULL) {
printf("Failed to open file!\n");
return 1;
}
fgets(pattern, MAX_LEN, fp); // 读取一行
fclose(fp);
// 读入误差值
fp = fopen("k.txt", "r");
if (fp == NULL) {
printf("Failed to open file!\n");
return 1;
}
fscanf(fp, "%d", &k);
fclose(fp);
int match = approximate_match(text, pattern, k);
printf("%d\n", match);
return 0;
}
```
这个程序会从当前目录下的 `text.txt`、`pattern.txt` 和 `k.txt` 文件中分别读取文本串、模式串和误差值,并计算它们之间的匹配程度。假设 `text.txt` 文件中包含文本串,`pattern.txt` 文件中包含模式串,`k.txt` 文件中包含误差值。可以根据实际情况修改文件名和文件格式。
阅读全文