我有功能,应该检查字符串中的4个字符是否是下一个ASCII码,如:A5mnpoR89cd,其中mnpo是答案。这是我的代码:
bool trzecie(string a,string b, string c, string d)
{
string x = a + b + c + d;
sort(x.begin(), x.end());
if((int)x.at(0) == (int)x.at(1) - 1 == (int)x.at(2) - 2 == (int)x.at(3) - 3)
{
return true;
}
else return false;
}
int main()
{
ifstream wejscie("hasla.txt");
string tab[200];
vector <string> vec;
for(int i=0; i<200; i++)
{
wejscie>>tab[i];
}
int licz_b = 0;
for(int i=0; i<200; i++)
{
string x = tab[i];
for(int j=3; j<x.size(); j++)
{
if( trzecie( x.at(j), x.at(j-1) , x.at(j-2), x.at(j-3)) ) //ERROR HERE
{
if(!trzecie( x.at(j), x.at(j-1) , x.at(j-2), x.at(j+1))) // AND HERE
{
licz_b++;
break;
}
}
}
}
cout<<"C. "<<licz_b<<endl;
}
我发现错误无效转换来自&#39; char&#39;到#char; char *&#39; -fpermissive 突出显示的行。问题是什么?我试图改变
x.at(j)
为:
x[j]
但它也没有工作; /:
还有其他选择吗?
答案 0 :(得分:0)
此功能具有签名
bool trzecie(string a,string b, string c, string d)
从string
构建char
的正确方法是
std::string str(1, char);
所以那些行应该是
if( trzecie( string(1, x.at(j)), string(1, x.at(j-1)), string(1, x.at(j-2)), string(1, x.at(j-3))))