"编写函数any(s1, s2),它返回字符串s1中来自字符串s2的任何字符第一次出现的位置,如果s1不包含来自s2的任何字符,则返回-1。(标准库函数strpbrk执行相同的工作但返回指向位置的指针。)"
"我想知道在循环中使用返回语句而不是像我在这里所做的那样使用“char_match = YES”是否是一个坏习惯。"
#define YES 1
#define NO 0
int char_seek(char string[], char string2[])
{
int i, j;
int char_match = NO;
for (i = j = 0; string[i] != '\0' && char_match == NO; ++i){
while (string2[j] != '\0' && string[i] != string2[j])
++j;
if (string2[j] == '\0')
j = 0;
else if (string[i] == string2[j])
char_match = YES;
}
if (char_match == NO)
return -1;
else
return i-1;
}
return i-1有什么问题吗?需要找到其他方法来解决这个问题吗?
while(..)
语句中使用括号{...}
来包含代码部分。 - ryykerssize_t any(const char *s1, const char *s2) { const char *p1 = s1; for (;;) { const char *p2 = s2; do { if (*p1 == *p2) { return *p1 ? (p1 - s1) : -1; } } while (*p2++ != '\0'); p1++; } }
。顺便说一句,多个返回并不是一个坏习惯,但如果方便的话应该避免使用多个返回。 - chux - Reinstate Monica