2012-02-27 4 views
0

.txt 파일에 약 1000 자리의 문자열이 있습니다. 한 번에 한 자리를 평가하고 인접한 자리와 비교 한 다음 목록을 아래로 이동하고 다시해야합니다. 나는 C++과 get() 함수를 사용하고있다. 여기에 지금까지이 작업은 다음과 같습니다 긴 문자열에서 번호를 선택해야합니다.

int element[5]; 
ifstream file; 

file.open("theNumber.txt", ios::in); 
for(int i=0;i<5;i++) 
{ 
    file.seekg(1); 
    element[i]=file.get(); 
} 
//read first 5 numbers. 

이 지금 내 코드는 컴파일되지 않습니다, 모든 당신의 가장 울게 만들 것이다 그것을 보여주는하지만,이 부분은 정확했다 있을지 확인하고 싶었다. 이 파일에 숫자의 처음 다섯 자리 숫자가있는 배열이 나옵니까?

+0

별도로 실행 해 보시지 않겠습니까? –

+1

컴파일 오류를 추가하는 것이 좋습니다. 따라서 Google에서 검색 할 수 있습니다. 'ifstream :: get()'은 정수에 캐스팅 된 문자를 반환하므로 첫 번째 숫자가 '0'이면 'element [0]'은 48이됩니다. – chris

답변

3

파일의 번호의 처음 5 자리가 배열로 표시됩니까?

아니요, 전화를 걸 때마다 seekg 호출이 두 번째 문자를 읽는 위치로 설정하고 있습니다. 그 전화를 버리십시오 (get()는 자동으로 읽기 위치를 앞당기십시오).

또한 이진 변환 텍스트를 처리해야합니다. 가장 쉬운은 다음과 같이해야 할 일 :

int ch = file.get(); 
if (ch < '0' || ch > '9') 
{ 
    // Handle invalid input or EOF/error... 
} 
element[i] = ch - '0'; 
2

이 나에게 파일의 숫자의 처음 다섯 자리 숫자 배열을 줄 것인가?

아니요, 죄송합니다. 5 번 넘게 파일의 두 번째 숫자를 줄 것입니다.

seekgtwo versions : 파일 포인터의 처음부터 위치를 설정하는 위치와 다른 위치와 관련된 위치를 설정하는 위치가 있습니다. 줄 file.seekg(1);은 파일 포인터를 파일의 두 번째 바이트 인 절대 위치 1로 설정합니다. 따라서 배열에 동일한 숫자가 반복됩니다.

seekg 오버로드를 사용하려면 1i으로 변경하는 것이 좋습니다.

행운을 빈다.


브렌든 (Brendan)과 스펜서 (spencercw)는 ASCII 코드도 변환해야합니다.

관련 문제