我正在尝试修改某人使用此行的代码:
out.write(&vecBuffer[0], x.length());
但是,我想事先修改缓冲区,以便删除任何我不想输出的错误字符。例如,如果缓冲区是“Test%string”并且我想摆脱%,我想将缓冲区更改为“Test string”或“Teststring”,无论哪个更容易。
答案 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++;
}
}
}