我正在使用C ++在Winform上创建我的第一个程序。我有一个函数和一个字符串输入。但是,当我运行该程序时,text.size()
:"Error C2228 left of '.size' must have class/struct/union"
相关代码:
private: System::Void bntGet_Click(System::Object^ sender, System::EventArgs^ e) {
in_itext = txtText->Text;
itext = Convert::ToString(in_itext);
for (Int32 index = 1; index <= itext.size(); index++)
{
if (itext[index] == '@')
{
while (itext[index - 1] != ' ')
{
index--;
}
while (itext[index] != ' ')
{
next_email += itext[index];
index++;
if (itext[index] == '\0')
break;
}
break;
}
}
txtEmail->Text = next_email;
}
有什么建议吗?谢谢大家!
答案 0 :(得分:1)
标准警告:虽然可以在C ++ / CLI中编写应用程序的主体,甚至使用WinForms在C ++ / CLI中编写GUI,但不建议这样做。 C ++ / CLI适用于互操作场景:C#或其他.Net代码需要与非托管C ++接口,C ++ / CLI可以提供两者之间的转换。对于主要开发,如果您需要托管代码,建议使用带有WinForms或WPF的C#,如果您想要不受管理,建议使用带有MFC的C ++。
那说:
for (Int32 index = 1; index <= itext.size(); index++)
和
&#34;错误C2039&#39;长度&#39;:不是&#39; System :: String&#39;&#39;
的成员
大小不是你在.Net中获得System::String
长度的方式。为此,您需要Length
属性。你第二次尝试就接近了,但你需要一个资本&#34; L&#34;。 (size()
是std::string
执行此操作的方式,但std::string
是与System::String
完全不同的野兽。)
其他问题:
in_itext = txtText->Text;
itext = Convert::ToString(in_itext);
它已经是一个字符串,你不需要转换它。
while (itext[index - 1] != ' ')
{
index--;
}
如果这样做,您可以轻松地运行字符串的开头。 (当索引等于零时,您将获得异常。)对零添加一个检查。
while (itext[index] != ' ')
{
next_email += itext[index];
index++;
if (itext[index] == '\0')
break;
}
.Net中的字符串不是以空值终止的,您需要检查长度。
如果我们后退一步,你实际上试图在这里解决什么问题?我最好的猜测是,您在中间某处有一些带有电子邮件地址的文本,而您只想提取电子邮件地址。如果是这种情况,那么我可能会尝试使用正则表达式来提取电子邮件地址。您可以使用.Net库的全部功能,使用它!有关要使用的正则表达式,请参阅Using a regular expression to validate an email address,并使用introduction page和class reference阅读正则表达式。