【问题标题】:How to replace with updated value in between string using C++?如何使用 C++ 替换字符串之间的更新值?
【发布时间】:2026-02-13 00:10:01
【问题描述】:

我正在尝试用更新的值替换字符串。第一次将其替换为更新后的值,但之后不再更新..

这是我的字符串:

 QString   JAVASCRIPT =
                     "<script>var PAGE_ID=__PAGE_ID__; var SCROLL_PERCENTAGE=__SCROLL_PERCENTAGE__;</script>"+
                      "<script type=\"text/javascript\" language=\"javascript\" src=\"scripts/quiz_objects.js\"></script>"+
                          "<script type=\"text/javascript\" language=\"javascript\" src=\"scripts/swipe.js\"></script>"+
                          "<script type=\"text/javascript\" language=\"javascript\" src=\"scripts/NativeBridge.js\"></script>"+
                          "<script type=\"text/javascript\" language=\"javascript\" src=\"scripts/native_base.js\"></script>"+
                          "<script type=\"text/javascript\" language=\"javascript\" src=\"scripts/native_device.js\"></script>"+
                          "<script type=\"text/javascript\" language=\"javascript\" src=\"js/mobi.js\"></script>";

我想用更新的值替换 "PAGE_ID" 值。

qDebug() << "currentPageInstanceeeeeeeeId" << currentPageInstanceId;
qDebug() << "javaaaaaaaaa" << JAVASCRIPT;
JAVASCRIPT.replace(__PAGE_ID__," " + currentPageInstanceId);

我在currentPageInstanceId 中获得了更新的值。在这里,我将__PAGE_ID__ 替换为currentPageInstanceId,这就是它第一次被替换的原因。现在我想替换“PAGE_ID=”和“;”之间的值。我该如何更换。我试过这样。

qDebug() << "currentPageInstanceeeeeeeeId" << currentPageInstanceId;
    qDebug() << "javaaaaaaaaa" << JAVASCRIPT;
    Qt::CaseSensitivity cs = Qt::CaseSensitive;
    script = JAVASCRIPT.indexOf("PAGE_ID=",cs);
    script1 = JAVASCRIPT.lastIndexOf(";", cs);
    JAVASCRIPT.replace(script+""+ script1," " + currentPageInstanceId);

提前致谢。

【问题讨论】:

  • 我从未使用过Qstring,我现在也无法访问带有 QT 的机器。尽管我尝试在标准 C++ 中重新解决您的问题,但我认为它有效,请检查 ideone.com/QefV3C 的代码。希望有帮助:-)
  • @40two 感谢您的回复 :) 但是当我尝试此代码时,我遇到了诸如“'pos'、'offset' 和 'delim_idx' 没有命名类型”之类的错误。
  • 您的编译器不支持 C++11 将关键字 auto 更改为 std::size_t
  • @40two 我将 auto 更改为 std::size_t 这些错误已清除,但现在我收到另一个错误,因为“字符串没有命名类型”..我删除了“字符串 JAVASCRIPT;”在头文件中......或者如果声明为“QString JAVASCRIPT;”我越来越喜欢“'class QString'没有名为'find'的成员”。
  • 包括字符串标题(即,放入序言#include &lt;string&gt;)。

标签: c++ string replace blackberry-10


【解决方案1】:

由于您想多次更新__PAGE_ID__(可能是__SCROLL_PERCENTAGE__)的值,我会这样处理:

将您的 JAVASCRIPT 值设置为:

QString   JAVASCRIPT =
                 "<script>var PAGE_ID=%1; var SCROLL_PERCENTAGE=%2;</script>"+
                  "<script type=\"text/javascript\" language=\"javascript\" src=\"scripts/quiz_objects.js\"></script>"+
                      "<script type=\"text/javascript\" language=\"javascript\" src=\"scripts/swipe.js\"></script>"+
                      "<script type=\"text/javascript\" language=\"javascript\" src=\"scripts/NativeBridge.js\"></script>"+
                      "<script type=\"text/javascript\" language=\"javascript\" src=\"scripts/native_base.js\"></script>"+
                      "<script type=\"text/javascript\" language=\"javascript\" src=\"scripts/native_device.js\"></script>"+
                      "<script type=\"text/javascript\" language=\"javascript\" src=\"js/mobi.js\"></script>";

然后当你想设置值时使用 arg 方法:

QString script = JAVASCRIPT.arg(currentPageInstanceId).arg(currentScrollPercentage);

然后使用脚本。

【讨论】:

  • 那么我如何在 JAVASCRIPT 中用这个 arg(currentPageInstanceId) 替换。
  • 每次您想要一个新的脚本值时,您都会再次调用 arg 方法。 JAVASCRIPT 的值不会改变。