我有两个字符串,一个是传入的,另一个是指向地图中字符串的指针。我似乎无法弄清楚为什么他们没有触发IF声明。我打印出每个的值来调试。 我也尝试了字符串比较运算符,似乎没有更好的工作。这超出了我的C ++知识范围。
我认为“Baaaang”应该在控制台中发布,因为两个值相等。然而,这似乎只是选择性地发布“Baaang”。
int isMapped(map<string,int> &givenSymbols, string s) // checks to see if the given string is already in the map
{
for (map<string,int>::iterator it=givenSymbols.begin(); it!=givenSymbols.end(); ++it)
{
cout<<"S="<<s<<endl;
cout<<"it="<<it->first<<endl;
if(s == (it->first))
{
cout<<"Baaaaanng"<<s<<endl;
return 1;
}
}
return 0;
}
答案 0 :(得分:0)
答案是你的字符串包含一些其他字符。以下是此代码应该有效的证据:
#include <map>
#include <iostream>
#include <string>
using namespace std;
int isMapped(map<string,int> &givenSymbols, string s)
{
for (map<string,int>::iterator it=givenSymbols.begin(); it!=givenSymbols.end(); ++it)
{
cout<<"S="<<s<<endl;
cout<<"it="<<it->first<<endl;
if(s == (it->first))
{
cout<<"Baaaaanng"<<s<<endl;
return 1;
}
}
return 0;
}
int main()
{
map<string, int> map1;
map1.insert(std::make_pair("Rdf0", 1));
map1.insert(std::make_pair("R0", 2));
isMapped(map1, std::string("R0"));
return 0;
}
打印:
S=R0
it=R0
BaaaaanngR0