微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果有一种方法可以将字符测试为一类用户定义字符?

如何解决如果有一种方法可以将字符测试为一类用户定义字符?

有没有办法定义类型并执行以下操作?

char c = 'a';
if (c == BRASSECHARTYPE)
{
     // do something if c is one of the following char [{()}]
}

解决方法

有很多方法可以做到:

简单的功能:

bool isOneOfChars(char ch,std::initializer_list<char> chars)
{
    return std::find(std::begin(chars),std::end(chars),ch) != std::end(chars);
}

bool isBrace(char ch)
{
    return isOneOfChars(ch,{'[','{','(',')','}'});
}

带有折叠表达式的花式模板:

template<char...Chars>
constexpr bool isOneOfChars(char ch)
{
    return ((Chars == ch) || ...);
}

constexpr bool isBrace(char ch)
{
     return isOneOfChars<'[','}'>(ch);
}

或指定初始化的查找表(clangs 支持):

constexpr bool isBrace(char ch)
{
    constexpr bool braceTable[256] {
        ['['] = true,['{'] = true,['('] = true,[')'] = true,['}'] = true,};

    return braceTable[static_cast<unsigned char>(ch)];
}

或任何其他解决方案。

https://godbolt.org/z/beGzq4snM

,

您可以使用 std::string::find 来检查字符是否等于 [{()}] 中的任何一个:

#include <string>
#include <iostream>

int main(){
    char needle = 'c';
    std::string haystack = "[](){}";
    if (haystack.find(needle) != std::string::npos) {
        std::cout << needle << " was found in " << haystack << "\n";
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。