如何解决如果有一种方法可以将字符测试为一类用户定义字符?
有没有办法定义类型并执行以下操作?
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 举报,一经查实,本站将立刻删除。