【问题标题】:How do I insert a variable result into a string in C++如何在 C++ 中将变量结果插入字符串
【发布时间】:2011-09-25 01:58:01
【问题描述】:

我刚开始在 Qt 中学习 C++,我想知道如何将变量结果放入字符串中?我正在尝试将其用于一个简单的应用程序,其中有人将他们的名字放在一个文本字段中,然后按下一个按钮,它会在一个句子中显示名字。我知道在objective-c中会是这样的,

NSString *name = [NSString stringWithFormatting:@"Hello, %@", [nameField stringValue]];
[nameField setStringValue:name];

我将如何用 C++ 做这样的事情?感谢您的帮助

【问题讨论】:

  • 顺便说一句...如果您的项目真的致力于 Qt,有几个很好的理由使用 QString 类而不是 std::string...其中一个是“隐式共享”。对于某些观点:stackoverflow.com/questions/1618798/…
  • “隐式共享”适用于内存有限且只有一个 CPU 内核的情况,但会降低多线程程序的速度。

标签: c++ qt


【解决方案1】:

我假设我们在这里讨论的是 Qt 的 QString 类。在这种情况下,您可以使用arg 方法:

 int     i;           // current file's number
 long    total;       // number of files to process
 QString fileName;    // current file's name

 QString status = QString("Processing file %1 of %2: %3")
                 .arg(i).arg(total).arg(fileName);

有关arg 方法的许多重载的更多详细信息,请参阅QString documentation

【讨论】:

  • 我建议使用单个多参数 arg(): ...").arg( i, total, fileName )。更强大,以防 i 或 total 恰好包含例如“%1” . 而且可能还更快。
  • @FrankOsterfeld:arg() 没有过载可以同时处理 ints 和 QStrings。
  • Ken:对,你必须把 int 包装在 QString::number() 中。
【解决方案2】:

你没有提到你的字符串是什么类型。如果您使用的是标准库,那么它将类似于

std::string name = "Hello, " + nameField;

这适用于连接字符串,如果你想插入其他复杂类型,你可以使用这样的字符串流:

std::ostringstream stream;
stream << "Hello, " << nameField;
stream << ", here is an int " << 7;

std::string text = stream.str();

Qt 可能有自己的字符串类型,应该以类似的方式工作。

【讨论】:

  • 我们去!谢谢你的帮助,我很惊讶它这么简单。
  • @Natatos:在我看来,这不是很简单,因为您需要为 ostringstream 引入另一个变量来创建您的字符串。
  • @KenBloom:嗯,你总是可以用一个临时的,比如( std::ostringstream() &lt;&lt; "Hello, " &lt;&lt; nameField &lt;&lt; ", here is an int " &lt;&lt; 7 ).str();,但我尽量避免它。
  • @K-ballo 这并不容易,因为一旦你使用 std::ostream &,它没有 str() 函数,如果你已经在使用它可能会工作C++0x,具有更新的 STL,但现在,您必须在调用 str 之前将 static_cast 显式传递给 ostringstream
  • 查看此帖子获取正确代码:stackoverflow.com/questions/303562/…
【解决方案3】:

我会使用 stringstream,但我不能 100% 确定它如何适合您的 NSString 案例...

stringstream ss (stringstream::in);
ss << "hello my name is " << nameField;

我认为QString 有一些漂亮的助手可能会做同样的事情......

QString hello("hello ");
QString message =  hello % nameField;

【讨论】:

【解决方案4】:

您可以使用QString::sprintf。不过,我还没有找到一个很好的例子来说明它的用途。 (如果其他人找到了,请随时将其编辑到此答案中)。

您可能有兴趣查看有关 the difference between QString::sprintf and QString::arg 的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2017-03-18
    • 2021-12-18
    • 1970-01-01
    • 2019-04-14
    相关资源
    最近更新 更多