【问题标题】:Visual Studio C++ removing last character from stringVisual Studio C++ 从字符串中删除最后一个字符
【发布时间】:2014-03-14 19:01:59
【问题描述】:

我的计算器程序需要一点帮助。我已经为数字 0-9 和算术运算符等主要按钮创建了代码,以使其执行简单的计算。

我现在遇到的问题是使 CE 按钮工作,单击 CE 按钮后,我需要从显示标签中删除最后输入的字符。

我试图以某种方式修改此代码,但它不起作用:

lblResult->substr(0, lblResult->size()-1);

我知道我在这里做错了,你能帮帮我吗?

提前致谢

【问题讨论】:

  • 您确实意识到substr() 返回一个新的string,而不是修改调用它的对象?如果您正在这样做并期望 lblResult 发生变化,只需在前面放一个 lblResult =(或者为了更高效,使用 lblResult->erase(lblResult->size() - 1);,或者在 C++11 中使用 lblResult->pop_back();)。
  • @crashmstr lblResult是显示计算结果的标签
  • @user3124052 ...标签?我想我明白了,但它是什么class?这才是最重要的部分。
  • @crashmstr 在VS生成的form1类中public ref class Form1 : public System::Windows::Forms::Form
  • @user3124052:这解释了很多。 System::Windows::Forms::Label 不是 C++ 标准 std::string,这就是这里的每个人都认为您的意思(毕竟“从字符串中删除最后一个字符”),实际上您可能确实是这个意思。遗憾的是,您在 .NET 世界中使用非标准数据类型进行操作。您将需要大致类似于lblResult->Text = lblResult->Text.Remove(lblResult->Text.Length); 的东西。检查here for the .NET String API

标签: c++ visual-studio-2010 visual-studio c++-cli calculator


【解决方案1】:

...既然我们知道 lblResult 是 System.Windows.Forms.Label,我们可以查看文档。

一个Label 有一个Text Property,它是一个String^(即一个字符串引用)。

对于您想要做的事情,Remove Method of String 是合适的。但是请注意在文档中它说它“返回一个新字符串,其中删除了当前字符串中指定数量的字符。”这意味着它不会修改字符串,而是返回修改后的副本。

所以为了改变标签的文本,我们需要给它的Text属性分配我们想要的:当前字符串,除了最后一个之外的所有字符:

lblResult->Text = lblResult->Text->Remove(lblResult->Text->Length - 1);

【讨论】:

  • 谢谢,抱歉没有具体说明标签类型。
【解决方案2】:
lblResult->resize(lblResult->size() - 1);

【讨论】:

  • 比substr好很多
【解决方案3】:

在这种情况下,您可以使用组件的 Remove 和 Length 方法。

使用以下代码访问组件文本:

component->Text

通过访问 Remove 和 component Length 方法来删​​除字符串的最后一个字符

= component->Text->Remove(component->Text->Length - 1)

我希望你觉得这很有用。

【讨论】:

    【解决方案4】:

    只问显而易见的问题——整个陈述是

    *lblResult = lblResult->substr(0, lblResult->size()-1);
    

    对吗?

    【讨论】:

    • 为什么这是答案而不是评论?
    • @cyber 这是一个反问的问题;我相信回答问题的答案(他认为 substr() 改变了字符串)是 OP 问题的答案。
    猜你喜欢
    • 2011-01-19
    • 2010-11-08
    • 2017-08-19
    • 2016-10-11
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多