我有一个字符数组,一旦用户输入一串字符,我的程序需要在我的大字符数组中找到字符串并报告其索引。但是,如果有!
之类的通配符,这将代表我的数组中的任何字符,我如何允许我的程序以任何字母的形式阅读!
?
示例:
char letter [] = {a,b,c,d,e,d,s,f,e}
如果用户输入ab!
,程序可以将其解释为abc并返回其找到abc
的索引值。
答案 0 :(得分:0)
您可以实现自己的strstr
版本,这会增加一个简单的额外条件。让我们调用函数StrStr
。
char* StrStr(const char *str, const char *target) {
if (!*target) return NULL;
char *p1 = (char*)str;
while (*p1) {
char *p1Begin = p1, *p2 = (char*)target;
while (*p1 && *p2 && (*p1 == *p2 || *p2 == '!')) {
p1++;
p2++;
}
if (!*p2)
return p1Begin;
p1 = p1Begin + 1;
}
return NULL;
}
这只会测试target
中是否找到str
并会比较每个字符。如果角色是感叹号,如果它们不同,它将被忽略。
您可以这样调用它,然后使用result - letter
获取该位置。
result = StrStr(letter, "b!d");
if(result != NULL) {
int position = result - letter;
printf("%d\n", position);
}else {
printf("-1\n");
}
如果要检查多个出现,可以创建一个指向字母的指针,然后将其设置为等于letter
加上位置加1的地址,以检查子串是否稍后在数组中找到。< / p>
pointer = letter;
while((result = StrStr(pointer, "a!c")) != NULL) {
int position = result - letter;
pointer = letter + position+1;
printf("%d\n", position);
}
以下是live示例。