C++ 如何在QString中删除asctime中的新行字符

C++ 如何在QString中删除asctime中的新行字符,c++,qt,qstring,C++,Qt,Qstring,我正在将时间转换为人类可读的格式。为此,我使用了asctime()函数。然而,它也在C++引用中被提及。p> 该字符串后跟一个新行字符('\n')并终止 使用空字符 我知道如果我使用字符指针,我可以删除'\n'字符。例如, char * str; str(strlen(str)-1) = '\0'; // repleacing new-line char to null-char 但是,如何删除QString中的新行字符?这是我的例子 time_t rawtime; stru

我正在将时间转换为人类可读的格式。为此,我使用了
asctime()
函数。然而,它也在C++引用中被提及。p> 该字符串后跟一个新行字符('\n')并终止 使用空字符

我知道如果我使用字符指针,我可以删除'\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”字符替换为空指针不是一个好主意。

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

strList = strList.trimmed();

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

bool QString::endsWith(常量QChar&c,Qt::CaseSensitivity cs=Qt::CaseSensitive)常量

QString::remove(int位置,int n)

QString&replace(常量QRegExp&rx,常量QString&after)

只需删除最后一个字符,即可设置。您可以使用字符串末尾的regexp
\n
来使用
remove()
replace()

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


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

正如vahancho已经指出的那样。修剪可能是最好的方法

根据以下文件:

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

例如:

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

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

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

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


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

正如我在编辑部分所说,我创建了报告txt和xls文件,这就是为什么删除所有字符不是一个好主意。。我的目标是只删除QString中最后的'\n'字符。该函数不会删除所有字符,而是从开始到结束都删除所有的whitespece字符。谢谢你,我使用了remove函数定义QRegExp,它解决了我的问题。只需使用Qt,问题就解决了(请参阅我的答案)。实际上我不知道Qt有这样的能力。。我写申请书的时间有限,所以我写得越快越好+1.告知这种能力。