如何查看复杂度为 O(1) 的字符串流对象中的最后一个字符



我试图在将一些东西刷新到std::stringstream对象上获得尾随换行符。现在我会尝试这样的事情:

const char* inputvalue = "My linen";
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指令和时间吗?

作为旁注,除了放置空格字符以在不牺牲性能的情况下摆脱新行之外,我是否可以完全删除最后一个换行符?

在将东西添加到stringstream之前,我正在获取const char*并检查它是否有新行n。如果是这样,我将其转换为char*并以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] = '';
        stream << std::string{nonconstcharline};
    }
    else {
        stream << std::string{constcharline};
    }
}

我读到了另一个问题如何使用const_cast?我不应该const char* char*和改变它,因为我似乎不拥有const char*的东西,但到目前为止没有问题。

最新更新