如何查看具有 O(1) 常数复杂度的 stringstream 对象中的最后一个字符?
How to see the last character in a stringstream object with O(1) constant complexity?
我试图在将一些内容冲入 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 指令和时间?
作为旁注,除了放置 space 字符以在不牺牲性能的情况下摆脱新行之外,我是否可以完全删除最后一个换行符?
在 stringstream
上添加东西之前,我正在使用 const char*
并检查它上面是否有新行 \n
。如果是这样,我将其转换为 char*
并在 size-1
上以 [=15=]
结束字符串。
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] = '[=10=]';
stream << std::string{nonconstcharline};
}
else {
stream << std::string{constcharline};
}
}
我阅读了另一个问题 How to use const_cast? 我不应该做 const char*
到 char*
并更改它,因为我似乎不拥有 const char*
东西,但是到目前为止没问题。
我试图在将一些内容冲入 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 指令和时间?
作为旁注,除了放置 space 字符以在不牺牲性能的情况下摆脱新行之外,我是否可以完全删除最后一个换行符?
在 stringstream
上添加东西之前,我正在使用 const char*
并检查它上面是否有新行 \n
。如果是这样,我将其转换为 char*
并在 size-1
上以 [=15=]
结束字符串。
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] = '[=10=]';
stream << std::string{nonconstcharline};
}
else {
stream << std::string{constcharline};
}
}
我阅读了另一个问题 How to use const_cast? 我不应该做 const char*
到 char*
并更改它,因为我似乎不拥有 const char*
东西,但是到目前为止没问题。