如何在 QString 的 asctime 中删除换行符

How to delete new-line character in asctime in QString

我正在将 time_t 转换为人类可读的格式。为此,我使用 asctime() 函数。但是,在 C++ 参考资料中也提到了它。

The string is followed by a new-line character ('\n') and terminated with a null-character.

我知道如果我使用字符指针,我可以删除'\n'字符。如;

char * str; 
str(strlen(str)-1) = '[=10=]'; // repleacing new-line char to null-char

但是如何删除QString中的换行符呢?这是我的例子;

    time_t rawtime;
    struct tm * timeinfo;
    QString strList;
    rawtime = 1430687052;
    timeinfo = localtime (&rawtime);
    strList += asctime(timeinfo);

编辑:

我正在创建报告文件,所以我的 QString 中有很多 '\n' 字符,这就是为什么将所有 '\n' 字符替换为空指针不是一个好主意。

我会使用 QString::trimmed() 函数删除所有尾随和前导空白字符,例如 '\t'、'\n'、'\v'、'\f'、'\r'、和 ' '。即:

strList = strList.trimmed();

有 3 种方法对您有用:

bool QString::endsWith (const QChar &c, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const;

QString::remove(int position, int n);

QString& replace(const QRegExp &rx, const QString & after)

只需删除最后一个字符即可。您可以将 remove()replace() 与正则表达式一起使用,检测字符串末尾的 \n

请注意,内部 QString 使用 16 位 UTF 字符编码。

如果你喜欢对 8 位字符进行操作,那么你应该使用 QByteArray 并且它是 QByteArray::remove(int position, int n) 方法。

AS vahancho 已经指出了。修剪可能是最好的方法。

来自修剪的文档:

与 simplified() 不同,trimmed() 只保留内部空白。

例如:

QString str = "  lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"

QString 为您删除了 [=10=],因此最后一个字符是您的 \n。这意味着您也可以通过将字符串大小调整为当前大小 -1 来简单地删除它。

告诉我你为什么在使用 Qt 时使用 C 标准 API? 你有很棒的 Qt API 来处理日期。

QDateTime time;
uint rawtime = 1430687052;
time.setTime_t(rawtime);
QString humanDate = QLocale::system().toString(time, QLocale::ShortFormat);


要在您的概念中删除换行符,只需使用 QString::trimmed(从前后删除任何白色字符)。