C 检查所有出现的一个字母都出现在另一个字母之前

C Check all occurrences of a letter appear before another letter

所以我有一个由N个字母'a'或'b'组成的字符串S。 如果 A 的所有出现都在 b 的所有出现之前,这应该 return 1 否则 return 0。

B 不需要出现在 S 中,A 也不需要出现在 S 中

例如

S='aabbb' returns 1 
S = 'ba' returns 0
S = 'aaa' returns 1
S= 'b' returns 1

所以我的方法是在字符串上使用 for 循环并检查 b 是否出现在 a 之前,就像这样:

char newstr[10] = "aabbba"; //should return 0


int len = strlen(newstr);

for (int i = 0; i < len+1; i++) {
    printf("%c", newstr[i]);
    if (newstr[i] < 'b') {
        printf("1");
    }
    else {
        printf("0");
    }

}

输出是 a1a1b0b0b0a1 1 所以..它正在部分检测 a 是否在 b 之前但不是完全正确的方式。

您的代码只是检测 a,而没有检查与 b 的关系。

条件“如果 A 的所有出现都在 b 的所有出现之前,则这应该 return 1,否则 return 0。”可以说是“这应该 return 0 如果 some A 的出现是 after some 出现 b 和 return 1 否则。".

一个示例实现是:

char newstr[10] = "aabbba";

int b_found = 0;
int result = 1;
for (int i = 0; newstr[i] != '[=10=]'; i++) {
    if (newstr[i] == 'b') {
        b_found = 1;
    } else if(b_found && newstr[i] == 'a') {
        /* 'a' is found after 'b' */
        result = 0;
    }
}
printf("%d", result);

i have a string S consisting of N letters 'a' or 'b'

should return 1 if all occurrences of A are before all occurrences of b and return 0 otherwise.

所以字符串里面不允许有序列ba。所以只是:

if (strstr(newstr, "ba") == NULL) { printf("1\n"); } else { printf("0\n"); }

或者只是:

printf("%d\n", !strstr(newstr, "ba"));