这是我最近遇到的 problem 代码。答案似乎适用于输入字符串的值小于128字节的每个测试用例,因为它传递a couple of test cases。对于大于128字节的每个值,它打印出一个似乎是垃圾值的大值。
std::string str;
std::cin>>str;
vector<pair<char,int>> v;
v.push_back(make_pair('C',0));
v.push_back(make_pair('H',0));
v.push_back(make_pair('E',0));
v.push_back(make_pair('F',0));
int i=0;
while(1)
{
if(str[i]=='C')
v['C'].second++;
else if (str[i]=='H')
{
v['H'].second++;
v['C'].second--;
}
else if (str[i]=='E')
{
v['E'].second++;
v['C'].second--;
}
else if (str[i]=='F')
v['F'].second++;
else
break;
i++;
甚至在
中包含相同的代码/*reading the string values from a file and not console*/
std::string input;
std::ifstream infile("input.txt");
while(getline(infile,input))
{
istringstream in(input);
string str;
in>>str;
/* above code goes here */
}
生成相同的结果。我不是在寻找任何解决方案或提示来得到正确的答案,因为我想测试我的算法的正确性。但我想知道为什么会发生这种情况,因为我是vector
容器的新手。
-Regards。
答案 0 :(得分:1)
if(str[i]=='C')
v['C'].second++;
你正在修改v [67]
...它不包含在您的向量中,因此无效的内存或未初始化的
答案 1 :(得分:1)
您似乎尝试使用vector
作为关联数组。 C ++中已经存在这样的结构:std::map
。请改用它。
答案 2 :(得分:0)
使用此v['C']
,您实际访问的是仅有4个项目的容器中的第67个(如果&#39; A&#39;是来自ASCII的65)元素。根据编译器和模式(debug vs release),您将获得代码的未定义行为。
您可能想要使用的是地图,即map<char,int> v;
代替vector<pair<char,int>> v;
而简单v['C']++;
代替v['C'].second++;