【C++】string 类---字符判断与大小写转换(超详细解析!)-三、LeetCode例题使用示范

时间:2024-04-02 14:34:11

???? 验证回文串

题目链接:验证回文串 

 ✨方法一:

class Solution {
public:
    bool isPalindrome(string s) {
        string str="\0";//定义一个新的字符串
        for(int i=0;i<s.length();i++){//对字符串s进行遍历
            if(isalnum(s[i])){//isalnum判定是不是字母或者数字字符
                str += tolower(s[i]);//将大写字母转换为小写,如果不是则不动
            }
        }
        string str_rev(str.rbegin(),str.rend());//对新字符串进行反转
        if(str==str_rev)//如果反转以后的字符串和原字符串相等则返回true
        return true;
        else
        return false;
    }
};

 ✨方法二:

//更好的双指针做法。
class Solution {
public:
    bool isPalindrome(string s) {
        string str = "\0";
        int n = s.length();
        int begin = 0;
        int end = n - 1;
        while (begin < end) {
            while (begin < end && (!isalnum(s[begin]))) {
                begin++;//从前往后找符合条件的字符
            }
            while (begin < end && (!isalnum(s[end]))) {
                end--;//从后往前找符合条件的字符
            }
            if (tolower(s[begin]) != tolower(s[end]))
                return false;

            begin++;
            end--;
        }
        return true;
    }
};

 ???? 检验大写字母

 题目链接:检验大写字母

class Solution {
public:
    bool detectCapitalUse(string word) {
        int size=word.length();
        int Big=0;//大写字符
        int Small=0;//小写字符
        for(int i=0;i<size;i++)//先遍历字符串中的字符
        {
            if(islower(word[i]))//islower()小写字符个数
            {
                Small++;
            }
            else if(isupper(word[i]))//isupper()大写字符个数
            {
                Big++;
            }
        }
        if(Small==size||Big==size)//如果都是大写或者小写返回true
        {
            return true;
        }
        else if(Big==1&&isupper(word[0]))//如果大写只有一个且是第一个返回true
        {
            return true;
        }
        else
        return false;
    }
};