Есть ли в библиотеке C функция, которая перебирает массив и проверяет, находятся ли два символа рядом друг с другом?
Нет.
Поскольку OP спрашивал о массиве , а не о строке , подход strstr()
не будет работать.
Использование приведенного ниже, работает дажеесли либо / оба c2, c2
равны '\0'
.
bool two_char_check(const char *s, size_t n, char c1, char c2) {
const char *original = s;
while (n > 0) {
char *s1 = memchr(s, c1, n);
if (s1 == NULL) {
return false;
}
if (s1 != original && s1[-1] == c2) {
return true;
}
size_t offset2 = (size_t) (s1 - s) + 1;
if (offset2 < n && s1[1] == c2) {
return true;
}
s += offset2;
n -= offset2;
}
return false;
}
int main(void) {
char array[30] = "example@.com";
// expect true
printf("%d\n", two_char_check(array, sizeof array, '@', '.'));
printf("%d\n", two_char_check(array, sizeof array, 'm', '\0'));
printf("%d\n", two_char_check(array, sizeof array, '\0', 'm'));
printf("%d\n", two_char_check(array, sizeof array, '\0', '\0'));
// expect false
printf("%d\n", two_char_check(array, sizeof array, 'x', '\0'));
printf("%d\n", two_char_check(array, sizeof array, '@', 'E'));
printf("%d\n", two_char_check(array, sizeof array, 'M', '\0'));
}