如何将我的计数值转换为枚举作为输出?

时间:2017-04-26 07:04:08

标签: c++11 enums bit-manipulation

这是一个示例代码段。

for (var i = 0; i < input.Length; i++)
{
    var c = input[i];
    if(char.IsUpper(c))
    {
        var charsToAdd = input.Skip(i).TakeWhile(char.IsUpper).ToArray();
        if(charsToAdd.Length > 1)
        {
            i += charsToAdd.Length - 1;
        }

        if(i > 0) list.Add(' ');

        list.Add(charsToAdd);
    }
    else 
    {
        list.Add(c);
    }
}

我想使用我的计数值进行比较,并将枚举类型作为输出结果。 我想这样做:

#include <iostream>
#include <string>
using namespace std;

enum class status{
CONNECTED,
NOT_CONNECTED
};

int main(){

std::string x;
std::cout<<"Enter a binary string = ";
std::getline(std::cin,x);
int count = 0;
for (int i=0;i < x.size() ; i++){
    if(x[i] & 1)
        ++count;
}

 std::cout<<"count = " <<count <<std::endl;
 return count;
}

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用std::underlying_type_t来执行此操作:

if(count == 1) {
    std::cout << static_cast<std::underlying_type_t<status>>(status::CONNECTED) << std::endl;
} else if(count > 1) {
    std::cout << static_cast<std::underlying_type_t<status>>(status::NOT_CONNECTED) << std::endl;
}

在C ++ 11中它变为:

if(count == 1) {
    std::cout << static_cast<typename std::underlying_type<status>::type>(status::CONNECTED) << std::endl;
} else if(count > 1) {
    std::cout << static_cast<typename std::underlying_type<status>::type>(status::NOT_CONNECTED) << std::endl;
}