在将某些内容刷新到std::stringstream
对象后,我试图在其上尾随换行符。现在,我会尝试这样的事情:
const char* inputvalue = "My line\n";
std::stringstream stream;
stream << std::string{inputvalue};
stream.seekp( -1, std::ios_base::end );
if( stream.peek() == '\n' ) {
stream << " ";
} else {
stream.seekp( 0, std::ios_base::end );
}
这是最有效的方法,即减少CPU指令和时间吗?
作为旁注,除了放一个空格字符以摆脱新行而又不牺牲性能的情况下,我是否可以完全删除最后一个换行符?
答案 0 :(得分:0)
在将事物添加到stringstream
之前,我要先使用const char*
并检查其上是否有新行\n
。如果是这样,我将其强制转换为char*
,并在\0
上以size-1
结束字符串。
Py_ssize_t linesize;
std::stringstream stream;
char* nonconstcharline;
const char* constcharline;
for( PyObject* linepy : linecache ) {
constcharline = PyUnicode_AsUTF8AndSize( linepy, &linesize );
if( constcharline[linesize-1] == '\n' ) {
nonconstcharline = const_cast<char *>( constcharline );
nonconstcharline[linesize-1] = '\0';
stream << std::string{nonconstcharline};
}
else {
stream << std::string{constcharline};
}
}
我读了另一个问题How to use const_cast?,我不应该对const char*
做char*
并更改它,因为我似乎不拥有const char*
,但到目前为止没问题。