我正在尝试编写一个简单的登录表单。我想在STL地图中存储登录帐户列表。
从表单上的文本框中检索文本值时。这些框返回“String ^”
所以我拥有的是:
map <String^, String^> NamePassList;
typedef pair<String^, String^> StringPair;
string line, usrName, password;
usrName = password = "";
ifstream ifs("login.in");
if (ifs.is_open()){
while (!ifs.eof()){
getline(ifs,line);
bool endofusername = false;
for (int i = 0; i < line.length(); i++){
if (line[i] == ' '){
endofusername = true;
}
if (!endofusername){
usrName += line[i];
}
else{
password += line[i];
}
}
String ^ temp1 = gcnew String(usrName.c_str());
String ^ temp2 = gcnew String(password.c_str());
NamePassList.insert(StringPair(temp1, temp2));
}
ifs.close();
}
String ^ UserName = txtUserName->Text;
String ^ Password = txtPassword->Text;
map<String^, String^>::iterator nameItor;
nameItor = NamePassList.find(UserName);
if (nameItor->first == UserName){
if (nameItor->second == Password){
MessageBox::Show("Sucsess!", "log", MessageBoxButtons::OK);
}
else
MessageBox::Show("Fail!", "log", MessageBoxButtons::OK);
}
else
{
MessageBox::Show("Fail!", "log", MessageBoxButtons::OK);
}
编译时我从“地图类”和实用程序获得的错误。
这种接缝就像最好的方法一样,但我尝试的一切都给了我一个新的错误。
任何帮助都会很棒!!谢谢大家。
答案 0 :(得分:0)
为了减少一些错误,请尝试使用std :: string来简化代码。
如果选择不使用托管String类型,我会选择std :: string。由于您已经使用了std :: string,请尝试使用NamePassList的类型。另外,键入dede map。然后对于插入,使用value_type。
typedef map<string, string> StringMap;
StringMap NamePassList;
插入:
StringMap::value_type vt(usrName, password);
StringMap::_Pairib pair = NamePassList->insert(vt);
if (pair.second == false)
{
... problems... key already exists ....
}
还有搜索:
StringMap::iterator iter = NamePassList.find(UserName);
if (iter != NamePassList.end())
{
...found...
}
你不想“使用”iter,直到你知道它对end()进行测试是有效的。