我应该做一个函数来计算单词“banana”在输入字符串中出现了多少次。如果没有,函数应该返回值零,如果有一个或多个,函数应该返回相应的数字。此外,单词“banana”必须有一个大写字母,不管是哪一个。程序实际上不必计算单词banana本身,而是计算字符串中是否有字母可以组成“banana”,而你可以组成多少个“banana”就是返回的数字。
我已经写了代码,但函数总是返回值0。
#include <stdio.h>
void getInput(char array[], int size) {
char character = getchar();
if (character == '\n') {
character = getchar();
}
int i = 0;
while (i < size - 1 && character != '\n') {
array[i] = character;
i++;
character = getchar();
}
array[i] = '\0';
}
int countBananas(const char *str) {
int i;
int countA = 0, countB = 0, countN = 0, uppercaseCount = 0, A = 0, B = 0, N = 0;
for (i = 0; str[i] != '\0'; i++) {
if (str[i] == 'A' || str[i] == 'a') {
countA++;
if (str[i] == 'A') {
uppercaseCount++;
}
}
if (str[i] == 'B' || str[i] == 'b') {
countB++;
if (str[i] == 'B') {
uppercaseCount++;
}
}
if (str[i] == 'N' || str[i] == 'n') {
countN++;
if (str[i] == 'N') {
uppercaseCount++;
}
}
}
if (countB >= 1 && countA >= 3 && countN >= 2 && uppercaseCount != 0) {
if (countB % 1 == 0 && countA % 3 == 0 && countN % 2 == 0) {
countA = 0, countB = 0, countN = 0;
for (i = 0; str[i] != '\0'; i++) {
if (str[i] == 'A' || str[i] == 'a') {
countA++;
if (countA == 3) {
A++;
countA = 0;
}
}
if (str[i] == 'B' || str[i] == 'b') {
countB++;
if (countB == 1) {
B++;
countB = 0;
}
}
if (str[i] == 'N' || str[i] == 'n') {
countN++;
if (countN == 2) {
N++;
countN = 0;
}
}
}
if (A < B && A < N) {
return A;
} else if (B < A && B < N) {
return B;
} else if (N < A && N < B) {
return N;
} else if (A == B && A == N) {
return A;
}
} else {
return 0;
}
} else {
return 0;
}
return 1;
}
int main() {
char str[100];
printf("Enter a string: ");
getInput(str, 100);
int result = countBananas(str);
printf("%d", result);
return 0;
}
字符串
3条答案
按热度按时间6mzjoqzu1#
这就是如何实现这一目标,如果我们被允许绕过元素:
字符串
对于B32ananaBbAananadskljsd的输入,输出为34,具有以下变化:
型
对于BAnanabanana的输入,输出为10,可能性为:
型
说明:
input
,一个字符串bananaString
,其中我们预先填充小写“banana”字符串inputIndex
,所以我们知道我们在哪里alreadyCapital
,以记录只有一个字母是大写的标准bananaString
的末尾,并且我们只有一个大写字母(否则我们不会到达这一点),那么我们有一个解决方案,我们停止counter
,这是加法算术运算的中性元素current
,一个我们缓存当前值的字符current
匹配bananaString
的当前期望字符(如果我们已经有了大写字母,那么我们区分大小写,否则以不区分大小写的方式进行)bananaSearcher
,并将解的数量添加到counter
input
bananaString
的下一个位置,因为我们找到了当前位置inputIndex
,这样我们就可以知道我们在哪里wxclj1h52#
实现@n.m.couldbeanAI共享的算法。我们计算了很多次,无论大小写,我们都有预期的字母频率,但确保它不长于大写字母的数量。
字符串
示例运行:
型
yzuktlbb3#
我是这样解决的:
字符串