【发布时间】:2020-04-25 19:17:24
【问题描述】:
我只是逐个字符地读取数字字符串,直到输入“\n”。
vector <char> pay;
vector <char> :: iterator p;
char x;
char maxdigit;
if(flag==1)
{
cin.ignore(); // to ignore the first enter key press, after the test case
flag=0;
}
for(long long int i=0; ; i++)
{
cin.get(x); // The >> operator doesn't detect the ENTER key, so the loop won't end
if(x=='\n')
break;
pay.push_back(x);
}
找到最大位数或最佳位数以删除以最小化输入的数字。
if(pay[1]=='0')
{
pay.erase(pay.begin());
while(pay[0]=='0')
pay.erase(pay.begin());
}
else
{
maxdigit=*max_element(pay.begin(),pay.end());
p = find(pay.begin(),pay.end(),maxdigit);
pay.erase(p);
}
但我收到一个 sigsegv 错误,如有任何帮助,我们将不胜感激。
【问题讨论】:
-
如果用户在没有输入任何数字的情况下直接按回车,向量将为空,
if(pay[1]=='0')将超出范围。 -
为了测试,您可以将所有
[]替换为at(),这将执行边界检查并帮助您缩小错误位置。 -
第一部分可以替换为std::getline。
-
你用过调试器吗?这应该会很快将您指出错误。
标签: c++ vector stl segmentation-fault