彼此相邻的字符签入C

时间:2018-12-17 22:24:35

标签: c

C库中是否存在遍历数组并检查两个字符是否相邻的函数?

例如:AppDelegate
是否有可能遍历数组并检查'@'和'。'彼此相邻?

2 个答案:

答案 0 :(得分:1)

使用strstr

if (strstr(array, "@.") || strstr(array, ".@"))
    /* the characters are touching */

答案 1 :(得分:1)

  

C库中是否存在遍历数组并检查两个字符是否相邻的函数?

不。

由于OP询问的是 array 而不是 string ,所以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'));
}