字符串编修

原创 2012年03月26日 21:35:20

算法想法源自《C语言名题精选百则》。


源码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define M 10

int dealWith(char *s,char *t);
int min3(int a,int b,int c);

int main()
{
	char *s = "xbyzek";
	char *t = "abcdef";
	
	printf("source:");
	puts(s);
	printf("target:");
	puts(t);
	printf("%d\n",dealWith(s,t));
	printf("source:");
	puts(s);
	printf("target:");
	puts(t);

	return 0;
}

int dealWith(char *s,char *t)
{
	int i,j;
	int s_len = strlen(s);
	int t_len = strlen(t);
	int **cost = (int **)malloc(sizeof(int) * max(s_len,t_len) + 1);
	cost[0] = (int *)malloc(sizeof(int) * (s_len + 1)* (t_len + 1));
	for(i = 1;i <= s_len;i++)
		cost[i] = cost[i - 1] + t_len + 1;
	cost[0][0] = 0;
	for(i = 1;i < s_len + 1;i++)
		cost[0][i] = i;
	for(i = 1;i < t_len + 1;i++)
		cost[i][0] = i;
	for(i = 1;i < s_len;i++)
	{
		for(j = 1;j < t_len;j++)
		{
			if(s[i] == t[j])
				cost[i][j] = cost[i - 1][j - 1];
			else
			{
				cost[i][j] = min3(cost[i - 1][j] + 1,cost[i][j - 1] + 1,cost[i - 1][j - 1] + 2);
			}
		}
	}
	return cost[i - 1][j - 1];
}

int min3(int a,int b,int c)
{
	int min = a;

	if(min > b)
		min = b;
	else if(min > c)
		min = c;
	return min;
}


命令编修能力 (history)

Linux中这么多的命令记录在哪里呢?在你的家目录内的 .bash_history 啦! 不过,需要留意的是,~/.bash_history 记录的是前一次登陆以前所运行过的命令, 而至于这一次登...

脚本程序编修入门与提高

  • 2013年09月08日 02:35
  • 58KB
  • 下载

linux shell 字符串操作(长度,查找,替换)详解 BASH

linux shell 字符串操作(长度,查找,替换)详解  在做shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串各种操作。 其实shell...
  • Augusdi
  • Augusdi
  • 2015年04月03日 16:01
  • 5046

python中格式化字符串

  • 2017年12月14日 14:12
  • 286KB
  • 下载

C++实现两个字符串之间的Levenshtein Distance(编辑距离)

1.什么是Levenshtein Distance Levenshtein Distance,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符...

将json字符串转化为对象

  • 2017年11月22日 09:12
  • 470KB
  • 下载

分割字符串方法

  • 2017年12月07日 14:31
  • 2KB
  • 下载

关联数组(数组下标索引不仅仅为数字还可以是字符串等)

最近遇上的奇怪的数组下标,查阅资料了解了一下,原来是关联数组,后期有详细了解到关联数组的使用情况的话再和大家分享。 关联数组  “关联数组”是一种具有特殊索引方式的数组。不仅可以通过整数来...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串编修
举报原因:
原因补充:

(最多只允许输入30个字)