2014-11-08 2 views
0

C++에서 파일의 정수를 읽고 하위 집합 합을 검사하는 함수에 전달하는 프로그램을 작성 중입니다. 정수 배열을 배열로 읽기 C++

파일

은과 같이 포맷 :

number of cases n 

sum for case 1 
list of integers separated by a space 

sum for case 
list of integers separated by a space 

sum for case n 
list of integers separated by a space 

내 문제는 지금 내 함수에 전달되는 배열로 정수의 목록을 읽는 방법에있다.

이 내 주요 지금까지입니다 :

fstream infile("subset.txt"); 

    if(infile.is_open()){ 

    int numCases, num; 

    infile >> numCases; 

    while(infile >> num){ 
     for(int i = 0; i < numCases; i++) 
     { 
      int sum; 
      int set[30]; 

      num >> sum; 
      for(int i = 0; i < 30; i++) 
      { 
       if(num == '\n') 
       { 
        sum[i] = -1 
       } 
       else 
       {  
        num << sum[i] 
       } 
      } 

       int n = sizeof(set)/sizeof(set[0]); 

       if(subsetSum(set, n, sum) == true) 
        printf("True"); 
       else 
        printf("False"); 
     } 
    } 
} 

else 
    printf("File did not open correctly."); 

return 0; 

어떤 도움 너희들은 나를 주시면 감사하겠습니다 제공 할 수 있습니다.

예, 이것은 과제를위한 것입니다. 그렇다면 나에게 힌트를 주시면 감사하겠습니다. 할당은 알고리즘을위한 것이고 나는 그 I/O를 가지고 작업 할 필요가 있습니다.

+0

납입 == '\ n'을 당신이 int를 읽기 때문에,하지 작동하지 않습니다 문자. 어쩌면 getline을 사용할 수도 있습니다. – stark

답변

0

std::getline을 사용하여 숫자 목록이있는 행을 읽은 다음 istringstream을 사용하여 해당 문자열에서 숫자를 파싱하십시오.

번호를 보유하려면 배열 대신 std::vector을 사용하십시오. 코드는 다음과 같이 보일 것이다, 그래서 실제 분석을 위해, 나는 아마, std::istream_iterator의 한 쌍을 사용하십시오 :

while (infile >> sum) { 
    std::getline(infile, line); 
    std::istringstream buffer(line); 
    std::vector<int> numbers{std::istream_iterator<int>(buffer), 
          std::istream_iterator<int>()}; 

    std::cout << std::boolalpha << subsetSum(numbers, sum); 
}