Как удалить символ новой строки в 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.

Другие вопросы по тегам