下面我将用两种题解解答这个题目

简单模拟题

方法一:

1.因为开始就是大写锁定,所以如果第一个字母是小写那么就已经按了一次转换键
2.接着模拟一遍,从头开始,如果当前是小写字母下一个是大写字母那么就++,如果当前是大写字母下一个是小写字母那么也需要++
3.最后得出来的就是答案

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
char s[maxn];
int main()
{
    while (~scanf("%s", s))
    {
        int ans = 0;
        int ls = strlen(s);
        if (islower(s[0]))
            ++ans;
        for (int i = 0; i < ls; ++i)
        {
            if (isupper(s[i]) && islower(s[i + 1]))
                ++ans;
            else if (islower(s[i]) && isupper(s[i + 1]))
                ++ans;
        }
        printf("%d\n", ans);
    }
}

方法二:

装换为01串,以为大写小写字母都有26个,如果转换为01串就很好比较了,此时大小写的区别就只有一个

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
char s[maxn];
int main()
{
    while (~scanf("%s", s))
    {
        int ans = 0;
        int ls = strlen(s);
        for (int i = 0; i < ls; ++i)
        {
            if (islower(s[i]))
                s[i] = '0';
            else
                s[i] = '1';
        }
        if (s[0] == '0')
            ++ans;
        for (int i = 0; i < ls - 1; ++i)
            if (s[i] != s[i + 1])
                ++ans;
        printf("%d\n", ans);
    }
}