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.告知这种能力。