2012-12-09 2 views
0

내가 읽고 텍스트 파일이 있습니다첫 번째 문자가 .substr 원인 ​​() 오류

this is an email file with [email protected] and some other text for the test 
[email protected] 
[email protected] 

을 그리고 나는 s는 라인과 전자의 시작입니다 substr (s, e - s)을 가지고는 끝입니다 나에게 줄 것이다이 :

terminate called after throwing an instance of 'std::out_of_range' 
what(): basic_str`entering::substr 
Aborted 

이것은 단지 아래 두 줄을 발생하고, 첫 번째는

내가 s이 t 일 때입니다 무슨 일이 일어나고 있는지 알고 문제 [email protected] 인쇄됩니다 그는 라인의 시작 부분에 문자가 없습니다 (예 : "[email protected]"또는 "[email protected]")이 오류가 발생합니다. 이것이 발생하지 않도록 추가 할 수있는 것은 무엇입니까?

while (getline(fin, lines)) 
{ 
for (int i = 0; i < lines.length(); i++) 
{ 
if (lines[i] == '@') 
{ 
int s; 

if (i == 0 || i == 1) break; 
for (s = i - 1; s < lines.length() ; s--) 
{ 
if(validChar(lines[s]) == false) 
{ 
s = s + 1; 
break; 
} 
} //for 

int e; 
bool hasDot = false; 

for (e = i + 1; e < lines.length(); e++) 
{ 
if (e == lines.length()) break; 
if(validChar(lines[e]) == false) 
{ 
break; 
} // if in for 

if(lines[e] == '.') hasDot = true; 
} // for 

anEmail = lines.substr (s, e - s); 
if (s < i && e > i && hasDot == true) 
cout << anEmail << endl; 
+2

'substr '을 호출하는 코드를 보여줄 수 있습니까? –

+0

우리에게 당신이 사용하고있는 코드를 보여주세요 –

답변

1

당연히 매개 변수 중 하나가 throw 된 out_of_range 예외 때문에 범위를 벗어났습니다. 값 s와 e가 예상 할 수있는 값인지 확인하기 위해 몇 가지 테스트를 실행합니다.

+0

이 루프 전후에 내 문제와 관련된 것은 없습니다. 다른 모든 것은 변수를 선언하고 파일을 여는 것입니다. – Archxiao

+0

내 문제가 무엇인지 알게 해 주셔서 감사합니다. – Archxiao

+0

확실, 환영합니다. –

관련 문제