ASCII 코드와 해당 숫자 값 및 문자열 (예 : 000.00-000.0.0.0
)의 글로벌 벡터 list
이 제공된 경우이 함수는 input
토큰 문자열 2-char 또는 3-char long을 취해 하나의 ASCII 심볼로 바꿉니다 0에서 184 사이의 숫자 값을 나타내는 다음 delimator없이 단축 문자열을 out
으로 반환합니다. 또한 ASCII 심볼이 주어진 역순으로 (방향 1) 숫자 문자열로 다시 변환하여 반환됩니다.재귀 함수의 out_of_range 예외가
//looks for input string in vector and returns output, 'c' is check row, 'r' is return row
string vectorSearch(string &check, int n, int c, int r)
{
if (check.length() <= 1)
return check;
if (list[n][c] == check || list[n][c] == ('0'+check)) //adds leading zero if 2char long
return list[n][r];
else
return vectorSearch (check, ++n, c, r);
}
//this function takes an ontology and either changes from single char
//to string or takes strings and converts to char representation
string Lexicon::convertOntology(string input, int direction, string out, string temp)
{
if (input == "" && temp == "")
return out; //check for completed conversion
else {
if (input[0] == '.' || input[0] == '-' || input == "") { //found deliniator or endk
if (input != "") return convertOntology(input.substr(1),direction,
out+=vectorSearch(temp, 0, direction, 1-direction), "");
else return convertOntology("", direction,
out+=vectorSearch(temp, 0, direction, 1-direction), "");
} else
return convertOntology(input.substr(1), direction, out, temp+=input[0]); //increment and check
}
}
이러한 함수는 마지막 char가 구문 분석 된 후 출력시를 제외하고는 정상적으로 작동합니다. return convertOntology(input.substr(1), direction, out+=add, temp);
의 중단으로 인해 및 temp == "0"
일 때 오류가 발생합니다. 마지막 통과시 vectorSearch()
은 임시 문자를 지우고 임시 문자열을 out 문자열에 추가해야합니다. 임시 문자는 == 1char이므로 vectorSearch()
에서 반환해야합니다. 그것은. 그런 다음 convertOntology()
반품 확인을 input
및 temp == ""
으로 삭제하십시오. 그러나, 그것은 무슨 일 vectorSearch()
의 첫 번째 줄에 휴식을 도달하지와
Unhandled exception at 0x77bc15de exception: std::out_of_range at memory location 0x0035cf1c
이 결코? 이것은 반환을 통한 재귀 재귀와 관련된 문제이며 재귀 루프를 어딘가에서 되돌려 놓고 있습니다.
내가 발견했을 수도 있습니다. 마지막 라운드에서 input.substr (1)은 문자열 ""에 호출됩니다. –