如何在 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(从前后删除任何白色字符)。
我正在将 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(从前后删除任何白色字符)。