regex 在Qt中,将QString中每个单词的第一个字母大写的最佳方法是什么?

nwo49xxi  于 2023-06-25  发布在  其他
关注(0)|答案(5)|浏览(178)

我正在考虑正则表达式,但这并不完全可读。还有像s.toUpper()这样的函数需要考虑,可能还有其他的东西。
那么,QString中单词首字母大写的最佳方法是什么呢?

p3rjfoxz

p3rjfoxz1#

使用this example作为参考,您可以执行以下操作:

QString toCamelCase(const QString& s)
{
    QStringList parts = s.split(' ', QString::SkipEmptyParts);
    for (int i = 0; i < parts.size(); ++i)
        parts[i].replace(0, 1, parts[i][0].toUpper());

    return parts.join(" ");
}
w9apscun

w9apscun2#

完全相同,但写法不同:

QString toCamelCase(const QString& s)
{
    QStringList cased;
        foreach (QString word, s.split(" ", QString::SkipEmptyParts))cased << word.at(0).toUpper() + word.mid(1);

    return cased.join(" ");
}

这会占用更多内存,但没有指针访问(没有括号运算符)。

bvn4nwqk

bvn4nwqk3#

还有一种替代方法,它使用对单词的引用进行迭代,并使用QChar引用修改第一个字符:

QString capitalise_each_word(const QString& sentence)
{
  QStringList words = sentence.split(" ", Qt::SkipEmptyParts);
  for (QString& word : words)
    word.front() = word.front().toUpper();

  return words.join(" ");
}

请注意,这里需要Qt::SkipEmptyParts(与此问题的其他答案一样),因为每个单词的第一个字符在大写时假设存在。这个假设在Qt::KeepEmptyParts(默认值)中不成立。

xfyts7mz

xfyts7mz4#

如果QString放置在任何使用QFont的项目中,则可以使用其setCapitalization属性将文本更改为标题大小写。这里有一个例子--我的代码很高兴发现了它。

QFont formatFont = m_formatNameEdit->font();
formatFont.setCapitalization(QFont::Capitalize);
m_formatNameEdit->setFont(formatFont);

感谢Qt Centre Thread: How to capitalize a string的回答

o4tp2gmn

o4tp2gmn5#

令人难以置信的C++/Qt...你只想得到一些0x 20的chars...

相关问题