题目描述

怎么样,前面的题还可以吧~ 

依旧是字符串处理,设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:

1. 删除一个字符;
2. 插入一个字符;
3. 将一个字符改为另一个字符。
对任给的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。

输入

第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于200。

输出

只有一个正整数,为最少字符操作次数。

样例输入
sfdxbqw
gfdgw

样例输出
4
/*------------------------------------无敌分割线---------------------------------------------------*/

先直接上代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 
 5 int main()
 6 {
 7     char s1[205], s2[205]; //因为字符串长度最大是200,这里设置大一些 s1作为需要修改的字符数组,s2是模板字符数组
 8     char *pt = s1;
 9     int t = 0, i; //t记录修改次数
10     scanf("%s %s", s1, s2);
11     //j是求a与b哪个字符串较小
12     int j = strlen(s1) > strlen(s2) ? strlen(s2) : strlen(s1);
13     //
14     for (i = 0; i < j; i++)
15     {
16         if (s1[i] != s2[i])
17             t++;//记录a,b相同下标,不同的字符个数
18     }
19     ////如果模板串比修改字符串长,那么就是:t
20     if (strlen(s2) > strlen(s1))
21         printf("%d", t);
22     else
23     {
24         if (strchr(pt + i, s2[i - 1]))//后面有相同的字符,要减1
25             printf("%d", t + strlen(s1) - strlen(s2) - 1);
26         else
27             printf("%d", t + strlen(s1) - strlen(s2));
28     }
29 
30     return 0;
31 }

因为代码里使用的strchr函数所以这里介绍一下用法:

头文件:#include<string.h>

功能:查找一个字符c在另一个字符串

str中末次出现的位置(也就是从str的左侧开始查找字符c首次出现的位置),并返回该字符的地址。如果未能找到指定字符,那么函数将返回NULL

1     char* strchr(char *s, char c)
2     {
3         while(*s != '\0' && *s != c)
4         {
5             s++;
6         }
7         return (*s==c ? s : NULL);
8     }




版权声明:本文为Kanna原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Kanna/p/12112898.html