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

时间:2015-05-29 06:40:15

标签: c++ qt qstring

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

  

该字符串后跟一个换行符('\ n')并终止   带有空字符。

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

char * str; 
str(strlen(str)-1) = '\0'; // 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'char替换为空指针不是一个好主意。

5 个答案:

答案 0 :(得分:5)

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

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


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

答案 1 :(得分:2)

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

strList = strList.trimmed();

答案 2 :(得分:0)

您会发现有三种方法很有用:

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)方法。

答案 3 :(得分:0)

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

来自修剪的文档:

与simplified()不同,trimmed()仅留下内部空白。

例如:

$mail

答案 4 :(得分:0)

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