Q: 字符串的修改
怎么样,前面的题还可以吧~
依旧是字符串处理,设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 }