从字符串中删除逗号

Ray*_*Ray 0 c++ string

我用C++创建了一个程序,它,从给定的整数中删除逗号().即2,00,00会返回20000.我没有使用任何新的空间.这是我创建的程序:

void removeCommas(string& str1, int len)
{
    int j = 0;

    for (int i = 0; i < len; i++)
    {
        if (str1[i] == ',')
        {
            continue;
        }
        else
        {
            str1[j] = str1[i];
            j++;
        }
    }

    str1[j] = '\0';
}

void main()
{
    string str1;
    getline(cin, str1);
    int i = str1.length();
    removeCommas(str1, i);
    cout << "the new string " << str1 << endl;
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果:

Input : 2,000,00
String length  =8
Output = 200000 0
Length = 8
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么它显示8输出中的长度,并在我输入空字符时显示字符串的其余部分.它应该显示输出200000和长度6.

Fre*_*son 16

让标准库为您完成工作:

#include <algorithm>

str1.erase(std::remove(str1.begin(), str1.end(), ','), str1.end());
Run Code Online (Sandbox Code Playgroud)

如果您不想修改原始字符串,那也很容易:

std::string str2(str1.size(), '0');
str2.erase(std::remove_copy(str1.begin(), str1.end(), str2.begin(), ','), str2.end());
Run Code Online (Sandbox Code Playgroud)


Bri*_*ndy 8

最后你需要做一个调整大小.

与流行的看法相反,std :: string CAN包含包含0的二进制数据.std :: string .size()与包含NULL终止的字符串无关.

std::string s("\0\0", 2);
assert(s.size() == 2);
Run Code Online (Sandbox Code Playgroud)