C++ 不会打印定义为“字符串 s(n,k);”然后调整大小的字符串

C++ doesnt print a string defined as "string s(n,k);" and then resized

提问人:RadiateSenga 提问时间:6/24/2023 更新时间:6/24/2023 访问量:58

问:

我正在尝试这段代码,但它没有打印任何东西:| ,有什么问题?

    string bitmask(3, 1); 
    bitmask.resize(5, 0); 
    cout << bitmask;

PS:我是 c++ 的新手(我来自 python)

顺便说一句,代码打印其他字符串定义为string s="string";

C++ IO

评论

1赞 NathanOliver 6/24/2023
1和 ' 是两回事。第一个是整数,第二个是字符。你想在用字符串做事时使用这个字符。'1
1赞 Retired Ninja 6/24/2023
你是说吗?1 和 0 是不可打印的字符,但可打印。std::string bitmask(3, '1'); bitmask.resize(5, '0');'1''0'
0赞 Pete Becker 6/24/2023
@RetiredNinja -- 我怀疑提问者的意思正是代码所说的。更正应该针对代码,而不是编写代码的人。

答:

0赞 RadiateSenga 6/24/2023 #1

如果我使用“1”或“0”而不是 1 或 0,则打印字符串。但是代码:(不再正常工作。

void comb(int N, int K)
{
    std::string bitmask(K, 1); // if I write bitmask(K,'1') it doesnt work
    bitmask.resize(N, 0); // if I write bitmask.resize(N,'0') it doesnt work
    std::cout << bitmask // this doesnt print anything

    // print integers and permute bitmask
    do {
        for (int i = 0; i < N; ++i) // [0..N-1] integers
        {
            if (bitmask[i]) std::cout << " " << i;
        }
        std::cout << std::endl;
    } while (std::prev_permutation(bitmask.begin(),bitmask.end()));
}

此代码必须打印 n 个数字 [0,1,2,...,n-1] 列表的所有组合。如果我写“0”而不是 0,它就不再有效了

评论

2赞 john 6/24/2023
那应该是 或if (bitmask[i] == '1')if (bitmask[i] != '0')
0赞 Retired Ninja 6/24/2023
这不是一个答案。您应该编辑您的问题以包含此代码。
1赞 john 6/24/2023
字符,布尔值和整数,不知道Python,但在C++中它们都是不同的东西。
0赞 RadiateSenga 6/24/2023
@RetiredNinja很抱歉,我的第一个线程是在 StOv 上打开的。
0赞 RadiateSenga 6/24/2023
@john是的,我明白了。但是,如果我写 0 和 1(而不是“0”和“1”),但只是它不打印字符串,为什么代码仍然有效?