描述: | 输入两个字符串,查找字符串1中与字符串2最先匹配的内容,将匹配的字符串输出。字符串2支持?通配符,?代表任意一个字符。已知字符串2不可能出现只有?的情况。 字符串1和字符串2的最大长度为128。 |
---|---|
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: | 待查找字符串,关键字字符串 |
输出: | 输出字符串 |
样例输入: | abcdefabcdeg,a?c??f |
样例输出: | abcdef |
已AC代码:
#include <cstdio>
#include <cstring>
using namespace std;
#define N 1000
int mystrncmp(char* s, char* t,int n){
for (int k = 0; k < n; k++){
if (s[k] == t[k] || t[k] == '?');
else return 0;
}
return 1;
}
int main(){
char str[N],s[N],t[N];
scanf("%s",s);
char* pch = strtok(s, ","); // strtok: 将字符串分解为一组字符串。s为要分解的字符串,delim为分隔符字符,s指向要分解的字符串,
// 之后再次调用要把s设成NULL。
strcpy(s, pch);
pch=strtok(NULL, ",");
strcpy(t, pch);
int m = strlen(s);
int n = strlen(t);
char* p = s;
for (int k = 0; k <= m - n; k++){
if (mystrncmp(p, t, n)){
p[n] = '\0';
puts(p);
break;
}
else{
p++;
}
}
return 0;
}
此题得分: 200 分
strtok()
使用举例:
#include<cstring>
#include<cstdio>
int main(void)
{
char input[]="abc,def,ghi";
char* p; /* strtok places a NULL terminator infront of the token,if found */
p = strtok(input,",");
if(p) printf("%s\n---\n",p); /* Asecond call to strtok using a NULL as the first parameter returns a pointe to the character following the token */
p = strtok(NULL,",");
if(p) printf("%s\n",p);
return 0;
}