【问题标题】:How do I insert spaces back into string after removing them删除空格后如何将空格重新插入字符串
【发布时间】:2019-11-22 20:51:32
【问题描述】:

我正在尝试: 1) 从给定的字符串中删除空格 2)从删除的空格字符串中,将空格插入到原来的位置 3) 最终结果应该是原文。

string original = "敏捷的棕狐跳过懒狗"; 字符串 removeSpace, withSpace;

int foo[8];
int count = 0;

cout << original << endl;

for (int i = 0; i < original.size(); i++)
{
    if (char(int(original[i])) == 32)
    {
        foo[count] = i;

        count++;
    }
    else
    {
        removeSpace += original[i];
    }
}
cout << endl;
for (int i = 0; i < 8; i++)
{
    cout << "Spaces at : " << foo[i] << endl;
}
cout << "==========With spaces remove==========" << endl;
cout << removeSpace << endl;
count = 0;

for (int i = 0; i < removeSpace.size(); i++)
{
    if (foo[count] == i)
    {
        withSpace += ' ';
        count++;

    }
    withSpace += removeSpace[i];
}

cout << "==========With spaces inserted==========";
cout << "\n" << withSpace << endl;

这就是我得到的:

quickb rownfo xjum psover thela zydo g

如何将它们重新插入以制作 “敏捷的棕狐跳过懒惰的狗”

【问题讨论】:

    标签: c++ string


    【解决方案1】:

    从您的输出中可以清楚地看出问题所在。在foo 中,您将存储空间的索引在删除任何空格之前。但是,当您放回空格时,您会将fooi 进行比较,i 是删除空格后的索引。这不是一件有意义的事情。您只需要调整算法以解决这种差异。

    下面是对您的代码进行的最小调整,可以解决该问题。通过将foo[cout]withSpace 字符串的大小进行比较,我将like 与like 进行比较。 foo[count]withSpace.size() 都是添加空格后字符串的索引和大小

    for (int i = 0; i < removeSpace.size(); i++)
    {
        if (foo[count] == withSpace.size())
        {
            withSpace += ' ';
            count++;
        }
        withSpace += removeSpace[i];
    }
    

    完整代码here.

    这段代码

    if (char(int(original[i])) == 32)
    

    是一个用复杂的方式做简单事情的好例子。这个更好

    if (original[i] == ' ')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多