C库中是否存在遍历数组并检查两个字符是否相邻的函数?
例如:AppDelegate
是否有可能遍历数组并检查'@'和'。'彼此相邻?
答案 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'));
}