C语言编程判断两个字符串是否匹配,其中一个字符串中包括通配符"*"或"?"(串)。"*"代表0个或多个字 符,"?"代表一个字符 【样例输入】 da?a*tru*e# datastructure# 【样例输出】 No
时间: 2023-12-26 18:07:15 浏览: 96
以下是一个 C 语言程序,实现了你的需求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 定义最大字符串长度
int match(char *s1, char *s2) {
int len1 = strlen(s1);
int len2 = strlen(s2);
int i = 0, j = 0;
while (i < len1 && j < len2) {
if (s1[i] == s2[j] || s1[i] == '?') { // 匹配当前位置的字符或 "?"
i++;
j++;
} else if (s1[i] == '*') { // 处理 "*" 的情况
while (i < len1 && s1[i] == '*') { // 跳过连续的 "*"
i++;
}
if (i == len1) { // "*" 是 s1 的最后一个字符,直接匹配成功
return 1;
}
while (j < len2 && s2[j] != s1[i] && s1[i] != '?') { // 在 s2 中寻找后续匹配的字符
j++;
}
} else {
return 0; // 不匹配
}
}
if (i == len1 && j == len2) { // s1 和 s2 都匹配完了
return 1;
} else if (i == len1 - 1 && s1[i] == '*') { // s1 的最后一个字符是 "*",匹配成功
return 1;
} else {
return 0; // 不匹配
}
}
int main() {
char s1[MAX_LEN + 1], s2[MAX_LEN + 1]; // 定义字符串 s1 和 s2
scanf("%s %s", s1, s2); // 输入字符串 s1 和 s2
// 判断 s1 和 s2 是否匹配
if (match(s1, s2)) {
printf("Yes\n");
} else {
printf("No\n");
}
return 0;
}
```
这个程序的思路是定义一个函数 `match`,用来判断两个字符串是否匹配。函数中使用两个指针 `i` 和 `j` 分别指向字符串 s1 和 s2 的当前位置,然后依次比较它们的字符。如果 s1 的当前字符是 s2 的当前字符或 "?",则匹配成功,指针向后移动一位;如果 s1 的当前字符是 "*",则需要在 s2 中寻找后续匹配的字符,直到找到 s1 的下一个字符或匹配失败为止。如果 s1 和 s2 都匹配完了,则匹配成功;否则匹配失败。
最后在主函数中调用 `match` 函数判断 s1 和 s2 是否匹配即可。
阅读全文