C++ STL地图<;字符串^,字符串^>;这张地图;为什么这样不行?
我正在尝试编写一个简单的登录表单。我想在STL映射中存储登录帐户列表 从表单上的文本框检索文本值时。这些框返回“String^” 因此,我得到的是:C++ STL地图<;字符串^,字符串^>;这张地图;为什么这样不行?,c++,map,stl,c++-cli,C++,Map,Stl,C++ Cli,我正在尝试编写一个简单的登录表单。我想在STL映射中存储登录帐户列表 从表单上的文本框检索文本值时。这些框返回“String^” 因此,我得到的是: map <String^, String^> NamePassList; typedef pair<String^, String^> StringPair; string line, usrName, password; usrName = password = ""; ifstream ifs("login.in")
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);
}
map NamePassList;
typedef对StringPair;
字符串行、usrName、密码;
usrName=password=“”;
ifstream ifs(“login.in”);
if(if.is_open()){
而(!ifs.eof()){
getline(ifs,line);
布尔内融合名称=假;
对于(int i=0;iText;
字符串^Password=txtPassword->Text;
迭代器nameItor;
nameItor=NamePassList.find(用户名);
如果(nameItor->first==用户名){
如果(nameItor->second==密码){
MessageBox::Show(“Successs!”,“log”,MessageBox按钮::OK);
}
其他的
MessageBox::显示(“失败!”,“日志”,MessageBox按钮::确定);
}
其他的
{
MessageBox::显示(“失败!”,“日志”,MessageBox按钮::确定);
}
编译时,我从“map类”和实用程序中得到了一个错误
这是最好的方法,但我尝试的每件事都会给我一个新的错误
任何帮助都会很好!!谢谢大家。为了可能减少一些错误,请尝试使用std::string简化代码 如果选择不使用托管字符串类型,我会选择std::String。由于您已经在使用std::string,请尝试使用该类型作为NamePassList。另外,在地图上键入def。然后,对于插入,使用值类型
typedef map<string, string> StringMap;
StringMap NamePassList;
以及搜索:
StringMap::iterator iter = NamePassList.find(UserName);
if (iter != NamePassList.end())
{
...found...
}
你不想“使用”iter,除非你通过对end()的测试知道它是有效的。到底什么是
字符串^
@RyanHaining,一个C++/CLI或C++/CX句柄(或什么;我忘了)到字符串。你在使用line
时没有检查以确保输入成功和line
有效。@RyanHaining谢谢!这是一个更好的方式来看待它。
StringMap::iterator iter = NamePassList.find(UserName);
if (iter != NamePassList.end())
{
...found...
}