2010-03-11 5 views
0

이미 열려 있고 좋은 텍스트 파일에 정수의 수를 세는 함수 만 작성해야합니다.텍스트 파일의 정수 수를 계산하는 함수는 무엇입니까?

a. 많은 수의 정수가 공백으로 나뉘어 진 텍스트 파일이 있다고 가정하십시오.

b. 이전에 열었던 ifstream 파일 객체를 매개 변수로 허용하는 analyzeFile 함수를 작성하고 파일에있는 정수의 개수를 계산합니다.

c. 정수를 사용하여 아무 것도 할 필요는 없지만 파일의 정확한 숫자 인 을 정확히 계산하여 해당 숫자를 호출하는 함수에 반환해야합니다.

d. 또한 파일 작업 자체를 조작 할 필요가 없으므로 은 파일을 닫거나 숫자을 계산하고 그 수를 반환하는 것 이외의 다른 작업을 수행하지 않아도됩니다.

내 문제에 도움을 주셔서 감사합니다!

편집 : 그것은 바로 여기 내가 지금까지 할 함수로 무엇을 가지고, 난 몰라 :

int analizeFile (ifstream &inf, const string &fileName) { 
    int count = 1; 
    int num; 
    fin.open(fileName.c_str()); 
    fin >> num; 
    while (fin.good()) { 
     fin>> num; 
     count ++; 
    } 
    return count; 
} 
+4

작성한 코드를 보여주십시오. 그리고 당신이 직면 한 문제. – dirkgently

+0

예, 지금까지 가지고있는 것과 문제가 무엇인지 게시하십시오. 그렇지 않으면 우리가 당신을 위해 숙제를하길 원하는 것처럼 보입니다.여기 –

+0

내가 함수로가 지금까지 무엇을, 내가 모르는 바로 그 것이다 : INT의 analizeFile (ifstream & inf를 const를 문자열 & fileName에) { INT 카운트 = 1; int num; fin.open (fileName.c_str()); fin >> num; while (fin.good()) { fin >> num; 카운트 ++; } 반송 률; } – Elaina

답변

2

댓글 :

int analizeFile (ifstream &inf, const string &fileName) { 

를 카운트가 있기 때문에 항상 음수가 아닌 양이라면 int보다 size_t을 사용하는 것을 선호 할 것입니다. Nit : 당신은 analyzeFile 함수의 이름을 변경할 수 있습니다.

int count = 1; 

여기에서 시작하는 문제 : 파일에 정수가없는 경우 잘못된 결과를 반환합니다. open를 호출하는

int num; 
    fin.open(fileName.c_str()); 

필요가 없습니다. 일반적으로 ifstream ctor에 의해 호출됩니다.

fin >> num; 
    while (fin.good()) { 

다시 필수 사항은 아닙니다. 스트림에서 추출하고 while 상태에서 테스트 할 수 있습니다.이 빈도가 자주 사용됩니다.

fin>> num; 
    count ++; 
    } 
    return count; 
} 
+1

+1 그냥 솔루션을 게시하기보다는 교육하는 데 시간과 노력이 필요합니다. – razlebe

+0

이 게시물이 * 교육 받았는지 * OP가 확실하게 논쟁의 여지가 있는지 여부. OP의 "커리큘럼"의이 시점에서 나는 분명하고 간단한 예제가 가장 큰 이익을 제공 할 것이라고 믿었습니다. OP가 부호가 있거나 부호없는 정수 유형 및 생성자에 대해 학습 할 준비가 되었다면 OP의 질문에서 분명 해졌을 것입니다. 정확하게 무엇을하는지에 대한 선험적 지식을 가지고 코드 스 니펫을 보는 것은 아주 계몽적일 수 있습니다! –

+0

더 중요한 것은'fin.good()'가 잘못되었습니다. 이 파일의 내용이 "21"이라면,'count'를'0'으로 초기화하면 파일에'0' 숫자가 있다고 생각할 것입니다 (왜냐하면'good()'은 eof 비트가 설정되면 false를 반환하기 때문입니다) . 반대편에서는 '카운트'를 '1'로 초기화하고 내용이 '21'이면 21을 읽은 후 eof 또는 fail 비트가 아직 설정되지 않았으므로 두 개의 숫자가 있다고 생각할 것입니다. –

2

당신은 반복자는 정수를 읽을 수없는 경우는이 스트림 상태를 실패 설정합니다, 기능적 접근 방식을 너무

// it was previously opened, so you don't need a filename. 
int analyzeFile (istream &inf) { 
    std::istream_iterator<int> b(inf), e; 
    return std::distance(b, e); 
} 

을 사용할 수 있으며 최종 반복자와 동일한 비교합니다. distance은 end iterator에 도달하는 데 걸린 반복 단계의 수를 반환합니다.

관련 문제