2017-04-10 6 views
0

문자열의 4 문자가 다음 ASCII 코드 인 지 확인해야하는 함수가 있습니다. A5mnpoR89cd 여기서 mnpo가 대답입니다. 여기 내 코드입니다 :'char'에서 'const char *'로의 변환이 올바르지 않습니다. - C++ ASCII 함수

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; 
} 

와 나는 'const를 숯불 *'강조 라인 -fpermissive 에 '문자'에서 오류 유효하지 않은 변환을 가지고있다. 문제가 무엇입니까? 나는에

x.at(j) 

변경 시도 :

x[j] 

을했지만 작동 중 하나를하지 않았다;/:

다른 옵션은 있습니까?

+0

'x.at되어야

std::string str(1, char); 

이다 구성하는 적절한 방법이 j)'와'x [j]'는 모두 인덱스'j'에있는 문자를 제공합니다. 'char'는 암묵적으로'std :: string'으로 변환 될 수 없습니다. 아마도'trzecie'가 4'std :: string' 대신에'char's를 4 개 받아들이는 것을 의미했을 것입니다. 그렇지 않으면'substring' 메소드를 사용할 수 있습니다. –

+0

@ FrançoisAndrieux @ 4 개의 문자를 사용 했으므로 감사합니다. – Rivi

+0

'A == B == C == D'는 4 개의 수량이 모두 같은지 확인하지 않습니다. – aschepler

답변

0

이 함수는 서명

bool trzecie(string a,string b, string c, string d) 

에게 char에서 string 그래서 그 라인 (

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)))) 
+1

더 좋은 해결책은'trzecie'를'char 4 '를 대신 사용하는 것으로 바꾸는 것이라고 생각합니다. 현재는 각각 4 개의'std :: string'을 1 문자 씩 기대합니다. 또한, 사용법은 네 개의'char'을 제공합니다. –