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 2008 和 SVN 在 C++ 中进行自动版本控制
当代码在 Visual Studio C++ 中正常工作时出现 MSB6006 错误