c语言题目代码 判断两个人字符串是否匹配(1个通配符代表一个字符) 【问题描述】 判断两个字符串是否匹配,其中一个字符串中包括通配符*,可以代表任意一个非空字符。(其中每个字符串长度不超过100000); 【输入形式】 分两行输入两个字符串,字符串中可以包括空格,以#结束,其中第一行字符串中包括通配符。
时间: 2023-05-19 14:04:49 浏览: 131
换行符结束输入。 【输出形式】 如果两个字符串匹配,输出“Match”,否则输出“Not match”。 【样例输入】 abcdefg a*c?fg 【样例输出】 Match 【解题思路】 首先判断两个字符串的长度是否相等,如果不相等直接输出“Not match”。然后逐个比较两个字符串的字符,如果相同或者其中一个字符是通配符*,则继续比较下一个字符;如果其中一个字符是通配符?,则也可以匹配任意一个非空字符,继续比较下一个字符。如果比较完所有字符后都匹配成功,则输出“Match”,否则输出“Not match”。
相关问题
c语言题目 判断两个字符串是否匹配(1个通配符代表一个字符) 【问题描述】 判断两个字符串是否匹配,其中一个字符串中包括通配符*,*可以代表任意一个非空字符。(其中每个字符串长度不超过100000);
可以使用递归的方法来解决这个问题。首先判断两个字符串是否都为空,如果是,则它们匹配;如果不是,则判断第一个字符是否匹配,如果匹配,则递归判断剩余的字符串是否匹配;如果第一个字符不匹配,则判断第一个字符串是否为通配符,如果是,则递归判断第一个字符串去掉通配符和第二个字符串是否匹配;如果第一个字符串不是通配符,则它们不匹配。
以下是 C 语言的代码实现:
```c
#include <stdio.h>
#include <string.h>
int match(char *s1, char *s2) {
if (*s1 == '\0' && *s2 == '\0') {
return 1;
} else if (*s1 == *s2) {
return match(s1 + 1, s2 + 1);
} else if (*s1 == '*') {
return match(s1 + 1, s2) || match(s1, s2 + 1);
} else {
return 0;
}
}
int main() {
char s1[100001], s2[100001];
scanf("%s%s", s1, s2);
if (match(s1, s2)) {
printf("Match\n");
} else {
printf("Not match\n");
}
return 0;
}
```
输入两个字符串,调用 match 函数判断它们是否匹配,输出结果。
c语言代码题 4.判断两个字符串是否匹配(1个通配符代表一个字符) 【问题描述】 判断两个字符串是否匹配,其中一个字符串中包括通配符”,可以代表任意一个非空字符。(其中每个字符串长度不超 过100000): 【输入形式】 分两行输入两个字符串,字符串中可以包括空格,以结束,其中第一行字符串中包括通配符。 【输出形式】 判断两个字符串是否匹配,若匹配,输Hyes,不匹配输出no
#include <stdio.h>
#include <string.h>
int main()
{
char str1[100001], str2[100001];
fgets(str1, 100001, stdin);
fgets(str2, 100001, stdin);
int len1 = strlen(str1) - 1; // 去掉换行符\n
int len2 = strlen(str2) - 1;
int i = 0, j = 0;
while (i < len1 && j < len2)
{
if (str1[i] == '*')
{
i++;
while (j < len2)
{
if (str1[i] == str2[j] || str1[i] == '*') // 匹配成功或者尝试下一个通配符
break;
j++;
}
}
else if (str1[i] == str2[j])
{
i++;
j++;
}
else
{
printf("no\n");
return 0;
}
}
if (i == len1 && j == len2) // 包括两个字符串同时结束的情况
printf("yes\n");
else
printf("no\n");
return 0;
}
阅读全文