检查字符串中的字符是否为空格不起作用

Checking whether a character in a string is a space does not work

提问人:Andrew 提问时间:9/11/2023 最后编辑:Mark RotteveelAndrew 更新时间:9/15/2023 访问量:69

问:

我需要在每个部分之前添加两个零,字符串中有 6 个数字,而不删除这些部分之间的空格。代码如下:

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

int main()
{
    string EightByte_BinaryBuffer = "010000 010100 001001 000011"; //can provide full code with reading input from user if needed

    for (int i = 0; i < EightByte_BinaryBuffer.length(); i++)
    {
        if (i == 0)
        {
            EightByte_BinaryBuffer.insert(i, "00");
        }
        else if (isspace(EightByte_BinaryBuffer.at(i)) == true) //output console just stays black for minute without any changes
        {
            EightByte_BinaryBuffer.insert(i, "00");
        }
    }
    cout << EightByte_BinaryBuffer << endl;
}

我也尝试了这个替代方案,但它也不起作用:

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

int main()
{
    string EightByte_BinaryBuffer = "010000 010100 001001 000011"; //can provide full code with reading input from user if needed

    for (int i = 0; i < EightByte_BinaryBuffer.length(); i++)
    {
        if (i == 0)
        {
            EightByte_BinaryBuffer.insert(i, "00");
        }
        else if (EightByte_BinaryBuffer[i] == ' ')
        {
            EightByte_BinaryBuffer.insert(i, "00");
        }
    }
    cout << EightByte_BinaryBuffer << endl;
}

对于上下文,我正在尝试复制 base64 转换器,但停留在步骤 5(将 6 位字节转换为 8 位字节)。以下是完整的算法: https://base64.guru/learn/base64-algorithm/encode

C++ 字符串 if-statement 插入 空格

评论

0赞 Thomas Matthews 9/11/2023
我不明白,为什么你每次都插入两个二进制数字?
1赞 Brian61354270 9/11/2023
您正在使字符串更长而不进行调整。每次遇到一个空间时,你都会在 插入字符,将空间推回未来。你遇到第一个空间的次数是无限次的。ii
2赞 Drew Dormann 9/11/2023
“不起作用”是什么样子的?你似乎在说你的代码有问题,但你还没有真正描述这个问题是什么
0赞 PaulMcKenzie 9/11/2023
这是你的目标吗?
0赞 Andrew 9/11/2023
@ThomasMatthews它是 base64 编码算法的一部分

答:

0赞 Andrew 9/15/2023 #1

感谢@brian61354270指出我用“i”计数器的错误,我能够修复它:

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

int main()
{
        for (int i = 0; i < EightByte_BinaryBuffer.length(); i++)
        {
            if (i == 0)
            {
                EightByte_BinaryBuffer.insert(i, "00");
                i += 2;
            }
            else if (EightByte_BinaryBuffer[i + 1] == ' ')
            {
                EightByte_BinaryBuffer.insert(i + 2, "00");
                i += 2;
            }
        }       
}

@paulmckenzie还建议使用输入流的替代方案:

//explanation of how this code works can be found in comments under the question

#include <iostream>
#include <string>
#include <sstream>

int main()
{
    std::string EightByte_BinaryBuffer = "010000 010100 001001 000011"; 
    std::istringstream strm(EightByte_BinaryBuffer);
    std::string small_buf;
    std::string new_buf;
    while (strm >> small_buf)
        new_buf.append("00" + small_buf + " ");
    new_buf.pop_back();        
    std::cout << new_buf;
}

谢谢大家的帮助。