Как удалить символ новой строки в asctime в QString
Я конвертирую time_t в читаемый человеком формат. Для этого я использую asctime()
функция. Однако это также упоминается в ссылках на C++.
За строкой следует символ новой строки ('\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);
РЕДАКТИРОВАТЬ:
Я создаю файл отчета, так что у меня есть много символов '\ n' в моем QString
Вот почему замена всех символов \ n на нулевой указатель не очень хорошая идея.
5 ответов
Есть 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)
метод.
Я хотел бы использовать QString::trimmed()
функция для удаления всех конечных и начальных пробельных символов, таких как '\t', '\n', '\v', '\f', '\r' и ' '. То есть:
strList = strList.trimmed();
Скажите, почему вы используете стандартный API C, когда используете Qt? У вас есть отличный Qt API для обработки дат.
QDateTime time;
uint rawtime = 1430687052;
time.setTime_t(rawtime);
QString humanDate = QLocale::system().toString(time, QLocale::ShortFormat);
Чтобы удалить символ новой строки в вашей концепции, просто используйте QString:: trimmed (удаляет спереди и сзади все белые символы).
А.С. Ваанчо уже указал. подстриженный, вероятно, лучший путь.
Из документации урезано:
В отличие от упрощенного (), урезанный () оставляет внутренние пробелы в покое.
Так, например:
QString str = " lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"
QString удаляет \0
для вас, так что последний персонаж ваш \n
, Это означает, что вы также можете удалить его, просто изменив размер строки до ее текущего значения -1.