【问题标题】:how to logical operations on bitstrings in c++?如何在 C++ 中对位串进行逻辑运算?
【发布时间】:2015-10-25 07:56:24
【问题描述】:

我必须以 10101110000 的形式输入,如果我以字符串的形式输入,那么如果我想对该字符串进行逻辑运算,例如 OR AND NOT异或,我该怎么办??任何建议都表示赞赏......如果它很简单,我很抱歉,因为我是 C++ 的新手......提前致谢!!

int main() {  
int ns,nt;
cin >> ns >> nt; //no: of students,no: of topics
vector<string> st;
for(int i=0;i<ns;i++) //taking binary strings as input
    {
    string s;
    cin >> s;
    st.push_back(s);
}
string a = st[0] | st[1];
cout << a;
return 0;
}

此方法无效:( :(

【问题讨论】:

  • 你可以使用std::bitset
  • 对任何问题都给出-1是不好的习惯...如果您不想回答,请不要回答..我们问问题不是为了好玩..我们不是和你们一样聪明.....所以在给任何问题-1之前要三思而后行..再见..这不是回复评论..这是给一般人的
  • 所以你可以改进你的问题吗? “此方法不起作用” 非常模糊。

标签: c++ logical-operators bits


【解决方案1】:

如果您想进行按位运算,并且您确定要处理的位不会超过 32 位(假设是 32 位或更多系统),您可以使用 strtoul 将字符串转换为无符号长整数。因为按位与、或和异或在整数类型上是自然。代码可能变成:

int main() {  
    int ns,nt;
    cin >> ns >> nt; //no: of students,no: of topics
    vector<unsigned long> st;
    for(int i=0;i<ns;i++) //taking binary strings as input
    {
        unsigned long val;
        char *ix;
        string s;
        cin >> s;
        if (!cin) { // control stream state (end of file...)
            cerr << "Input error" << endl;
            return 1;
        }
        val = ::strtoul(s.c_str(), &ix, 2); // convert from binary to integral
        if (*ix != '\0') {     // control input validity
            cerr << "Wrong value >" << s << "<" << endl;
            i -= 1;
        }
        else st.push_back(val);
    }
    unsigned long a = st[0] | st[1];
    cout << a;
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多