如何替换/删除字符缓冲区中的字符?

时间:2013-02-07 16:22:31

标签: c++

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

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

但是,我想事先修改缓冲区,以便删除任何我不想输出的错误字符。例如,如果缓冲区是“Test%string”并且我想摆脱%,我想将缓冲区更改为“Test string”或“Teststring”,无论哪个更容易。

5 个答案:

答案 0 :(得分:3)

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

'%'

replace_if替换为谓词对象,调用true, 并且您可以替换谓词的任何字符 对象返回std::transform。但总是有相同的性格。对于 更灵活,你传递的是char 一个取char并返回vecBuffer.erase( std::remove( vecBuffer.begin(), vecBuffer.end(), '%' ). vecBuffer.end() ); 的函数;它会 在缓冲区中的每个字符上调用。

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

remove

删除字符。在这里,您也可以替换remove_if 使用{{1}},并使用谓词,它可能匹配许多 不同的人物。

答案 1 :(得分:2)

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

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

将在适当的位置替换所有出现的%。您可以指定" "作为替换,甚至"REPLACEMENT",以适合您。

答案 2 :(得分:1)

std::string str("Test string");
std::replace_if(str.begin(), str.end(), boost::is_any_of(" "), '');
std::cout << str << '\n';

答案 3 :(得分:0)

您无需使用升级库。最简单的方法是使用空格替换%字符,使用<algorithm>标题中的std :: replace():

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

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

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

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

答案 4 :(得分:-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++;
        }
    }
}