Персонажи рядом друг с другом отмечаются в C - PullRequest
0 голосов
/ 18 декабря 2018

Есть ли в библиотеке C функция, которая перебирает массив и проверяет, находятся ли два символа рядом друг с другом?

Например: array[30] = "example@.com"
Можно ли просмотреть массив и проверить, являются ли '@' и '.'рядом друг с другом?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Есть ли в библиотеке 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'));
}
0 голосов
/ 18 декабря 2018

Использование strstr:

if (strstr(array, "@.") || strstr(array, ".@"))
    /* the characters are touching */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...