Visual Studio C++ 从字符串中删除最后一个字符

Posted

技术标签:

【中文标题】Visual Studio C++ 从字符串中删除最后一个字符【英文标题】:Visual Studio C++ removing last character from string 【发布时间】: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。 【参考方案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 问题的答案。

以上是关于Visual Studio C++ 从字符串中删除最后一个字符的主要内容,如果未能解决你的问题,请参考以下文章

C++ 项目在 Visual Studio 2019 中触发了断点

如何在 Visual Studio 中删除未使用的对象?

使用 Visual Studio 2008 和 SVN 在 C++ 中进行自动版本控制

当代码在 Visual Studio C++ 中正常工作时出现 MSB6006 错误

Visual Studio 2013 和 2015 中的 C++ 编译器错误 C2280“试图引用已删除的函数”

将 C++ 项目从 Visual Studio 2008 转换为 Visual Studio 2010