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

问题描述

所以我有一个由N个字母“ a”或“ b”组成的字符串S。 如果所有出现的A都在所有出现的b之前,则应返回1,否则返回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之前,但不是完全正确。

解决方法

i有一个由N个字母“ a”或“ b”组成的字符串S

如果A的所有出现都早于b的所有出现,则应返回1,否则应返回0。

因此,不允许在字符串内部包含序列ba。所以就这样:

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

或者只是:

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

您的代码只是在检测a而未检查与b的关系。

条件“如果A的所有出现都在b的所有出现之前,则应返回1,否则返回0。”可以说为“如果在某项b中出现了一些之后,一些,并且应该返回 1 ,则返回 0 >否则。”

此示例实现为:

char newstr[10] = "aabbba";

int b_found = 0;
int result = 1;
for (int i = 0; newstr[i] != '\0'; 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);