0

我正在尝试修改使用此行的某人的代码:

out.write(&vecBuffer[0], x.length());

但是,我想事先修改缓冲区,以便删除我不想输出的任何坏字符。例如,如果缓冲区是“Test%string”并且我想去掉 %,我想将缓冲区更改为“Test string”或“Teststring”,以更容易为准。

4

5 回答 5

3

std::replace将允许用另一个特定字符替换一个特定字符,例如'%'' '. 只需正常调用它:

std::replace( vecBuffer.begin(), vecBuffer.end(), '%', ' ' );

将 替换'%'为谓词对象 call replace_if,您可以替换谓词对象返回的任何字符true。但总是具有相同的性格。为了获得更大的灵活性,std::transform您可以传递一个函数,该函数接受 achar并返回 a char; 它将在缓冲区中的每个字符上调用。

或者,您可以执行以下操作:

vecBuffer.erase(
    std::remove( vecBuffer.begin(), vecBuffer.end(), '%' ).
    vecBuffer.end() );

删除字符。在这里,您也可以替换removeremove_if,并使用谓词,它可以匹配许多不同的字符。

于 2013-02-07T16:33:17.447 回答
2

您可以使用的最简单的库可能是Boost String Algorithms库。

boost::replace_all(buffer, "%", "");

将在原地替换所有出现的%无。您可以指定" "为替代品,甚至可以指定"REPLACEMENT"为适合您的。

于 2013-02-07T16:25:36.530 回答
1
std::string str("Test string");
std::replace_if(str.begin(), str.end(), boost::is_any_of(" "), '');
std::cout << str << '\n';
于 2013-02-07T16:30:31.253 回答
0

您不需要使用 boost 库。最简单的方法是使用标题%中的 std::replace() 将字符替换为空格:<algorithm>

std::replace(vecBuffer.begin(), vecBuffer.end(), '%', ' ');

我假设 ,vecBuffer顾名思义,是一个 std::vector。如果它实际上是一个普通数组(或指针),那么你会这样做:

std::replace(vecBuffer, vecBuffer + SIZE_OF_BUFFER, '%', ' ');

SIZE_OF_BUFFER 应该是数组的大小(如果您不想转换整个缓冲区,则应该是要处理的数组中的字符数。)

于 2013-02-07T16:27:40.343 回答
-1

假设你有一个功能

bool goodChar( char c );

这会返回true您被批准的角色,false否则,那么怎么样

void fixBuf( char* buf, unsigned int len ) {
    unsigned int co = 0;
    for ( unsigned int cb = 0 ; cb < len ; cb++ ) {
        if goodChar( buf[cb] ) {
           buf[co] = buf[cb];
           co++;
        }
    }
}
于 2013-02-07T16:26:50.493 回答