#include <stdio.h> #include <string.h> const int maxlen=1001; char x[maxlen],y[maxlen]; int max2(int x,int y) { if(x>y) return x; return y; } int Count(int n , int m) { if ((n==0)||(m==0)) return 0; if(x[n-1]==y[m-1]) return Count(n-1,m-1)+1; else return max2(Count(n-1,m),Count(n,m-1)); } int main() { int lx,ly,result; while(scanf("%s%s",x,y)!=EOF) { lx=strlen(x); ly=strlen(y); result=Count(lx,ly); printf("%d\n",result); } return 0; }
时间: 2024-04-27 22:24:15 浏览: 50
看起来这是一段求两个字符串的最长公共子序列的代码,其中使用了经典的动态规划算法。具体实现是通过一个二维数组来保存子问题的解,然后依次填充整个数组,最后得到整个问题的解。函数 Count(n,m) 表示计算 x[0...n-1] 和 y[0...m-1] 两个字符串的最长公共子序列的长度。如果当前比较的两个字符相同,则表示当前字符是两个字符串公共的一个字符,所以最长公共子序列的长度应该加 1,继续比较下一个字符。如果当前比较的两个字符不同,则需要考虑两种情况:要么将 x 的最后一个字符去掉,继续比较 y;要么将 y 的最后一个字符去掉,继续比较 x。这两种情况中的最长公共子序列长度取最大值即可。最终返回的结果就是两个字符串的最长公共子序列的长度。
相关问题
练习-编写函数输入一批字符串,输出其中最长的字符串.#include <stdio.h> #include<string.h> #define M 100 #define N 80 void inputarr (char array[ ][N] , int n); int maxlenstr (char array[ ] [N] , int n); int mystrlen(const char str[ ]);
下面是一个实现输入一批字符串,输出其中最长的字符串的示例代码:
```
#include <stdio.h>
#include <string.h>
#define M 100
#define N 80
void inputarr(char array[][N], int n);
int maxlenstr(char array[][N], int n);
int mystrlen(const char str[]);
int main() {
char array[M][N];
int n, maxlen;
printf("请输入字符串个数:");
scanf("%d", &n);
inputarr(array, n);
maxlen = maxlenstr(array, n);
printf("最长的字符串是:%s\n", array[maxlen]);
return 0;
}
void inputarr(char array[][N], int n) {
int i;
printf("请输入%d个字符串:\n", n);
for (i = 0; i < n; i++) {
scanf("%s", array[i]);
}
}
int maxlenstr(char array[][N], int n) {
int i, maxlen = 0, maxindex = 0;
for (i = 0; i < n; i++) {
if (mystrlen(array[i]) > maxlen) {
maxlen = mystrlen(array[i]);
maxindex = i;
}
}
return maxindex;
}
int mystrlen(const char str[]) {
int len = 0;
while (str[len] != '\0') {
len++;
}
return len;
}
```
这个程序中,首先定义了一个二维字符数组 `array`,用于存储输入的字符串。然后通过 `inputarr()` 函数输入这些字符串。接着,通过 `maxlenstr()` 函数找到其中最长的字符串所在的位置,最后输出该字符串即可。
需要注意的是,在输入字符串时,我们使用了 `scanf()` 函数,这个函数可以读取以空格或回车分隔的字符串,但是如果输入的字符串中有空格,那么空格后面的内容就会被忽略。
如果需要确认char *src的长度,使用strlen_s过程中 如何确定size_t maxlen呢
在C语言中,`strlen_s`并不是标准库函数,而是微软在某些编译器中提供的安全版本函数,用于替代`strlen`。`strlen_s`函数用于计算字符串的长度,并且可以指定一个最大长度,以防止缓冲区溢出。
要确定`size_t maxlen`,你需要知道目标缓冲区的大小。`maxlen`应该设置为目标缓冲区的大小,以防止写入超过缓冲区大小的数据。
以下是一个示例代码,展示了如何使用`strlen_s`来确定字符串的长度:
```c
#include <stdio.h>
#include <string.h>
int main() {
const char *src = "Hello, World!";
size_t maxlen = 100; // 假设目标缓冲区的大小为100
size_t length;
errno_t err = strlen_s(src, maxlen, &length);
if (err == 0) {
printf("The length of the string is: %zu\n", length);
} else {
printf("Error: %zu\n", err);
}
return 0;
}
```
在这个示例中,`maxlen`被设置为100,这意味着`strlen_s`将计算`src`的长度,但不会超过100个字符。如果`src`的长度超过100,`strlen_s`将返回一个错误码。
阅读全文