2014-04-03 4 views
0

텍스트 파일을 읽고 텍스트 파일의 토큰을 2-D 매트릭스에 넣는 데 문제가 있습니다. 여기 텍스트 파일을 읽고 토큰을 2D 매트릭스에 넣는 데 문제가 있습니다.

내 코드입니다 : 나는 2-D 매트릭스를 표시하고자 할 때 더 프로그램에서 나는 오류가없는

std::vector< vector <std::string> > my_matrix(10, vector <std::string>(10)); 

ifstream myReadFile; 
myReadFile.open("class_data.txt", ios_base::in); 
char output[100]; 
if (myReadFile.is_open()) { 
    if (!myReadFile.eof()) { 
     myReadFile >> output; 

     char* token = NULL; 
     char* context = NULL; 
     char delims[] = " ,\t\n"; 

     token = strtok_s(output, delims, &context); 

     if (token != NULL) 
     { 
      for (int i = 0; i < 10; i++) { 
       for (int j = 0; j < 10; j++) { 
        my_matrix[i][j] = *token; 
        cout << "token = " << token << endl; 
        cout << "matrix = " << my_matrix[i][j] << endl; 
        token = strtok_s(NULL, delims, &context); 
       } 
      } 
     } 
    } 
} 

std::cout.width(3); std::cout << left << "ID"; 
std::cout.width(9); std::cout << left << "Project1"; 
std::cout.width(9); std::cout << left << "Project2"; 
std::cout.width(9); std::cout << left << "Project3"; 
std::cout.width(9); std::cout << left << "Project4"; 
std::cout.width(9); std::cout << left << "Project5"; 
std::cout.width(9); std::cout << left << "Project6"; 
std::cout.width(9); std::cout << left << "Project7"; 
std::cout.width(9); std::cout << left << "Midterm"; 
std::cout.width(9); std::cout << left << "Final" << std::endl; 
std::cout << "-------------------------------------------------------------------------------" << std::endl; 

for (int i = 0; i < 10; i++) { 
    for (int j = 0; j < 10; j++) { 
     cout.width(10); std::cout << my_matrix[i][j]; 
    } 
    std::cout << " " << std::endl; 
} 

, 그것은 컴파일하지만, 그것을 표시하지 않습니다. 전체 행렬에는 아무런 가치가 없습니다.

누구든지 나를 도와 줄 수 있고 문제가 무엇인지 말해 줄 수 있습니까? 2 for 루프를 수행하는 방식과 맞습니까, 아니면 텍스트 파일을 읽는 방식입니까? 문제가 발견되면 누구나 해결책을 제안 할 수 있습니다.

P.S 최고 전문 코드가 없으면 미안하지만 C++에서는 초보자이며 대학 수준의 프로그래밍 과정을 수강하지 않았습니다.

바로이 같은 매트릭스 = 성병 : : 문자열 연산자에 전달, 당신은 이미 10 × 10 행렬을 가지고 strtok를 현재 토큰 숯불 *를 반환
+0

입력 데이터의 모양을 보여줄 수 있습니까? –

+0

classdata.txt에는 다음 텍스트가 포함되어 있습니다. A00529154 76 79 85 91 75 80 90 56 58 A00656624 79 85 0 86 86 76 51 89 92 A02507691 47 94 92 49 77 72 25 25 95 A00612352 41 82 90 58 87 0 50 98 80 A04012435 91 50 78 68 70 60 42 74 85 A00654400 47 94 89 75 80 76 0 71 83 A00577109 44 88 84 86 89 88 99 100 90 A00580920 41 82 80 90 89 97 93 84 86 A04028610 90 90 90 90 90 90 90 90 90 A04063494 90 90 90 90 70 90 90 90 012 –

답변

1

: 또한 재고 할 필요가

my_matrix[i][j] = token; 

루프의 논리. 내부 for에 strtok 호출 후 반환 값에 대한 검사를 추가하고 NULL이면 두 루프에서 모두 중단합니다. while 루프를 if 테스트로 바꿉니다.

편집 : 나는, 그러나, 루프의 2가 너무 작은 변화를 필요로하는 경우 당신이로 잠시 변경 참조

. 다음과 같이 제안합니다 :

for (int i = 0; i < 10 && token; i++) { 
    for (int j = 0; j < 10 && token; j++) { 
     my_matrix[i][j] = token; // NOTE: not *token here 
     cout << "token = " << token << endl; 
     cout << "matrix = " << my_matrix[i][j] << endl; 
     token = strtok_s(NULL, delims, &context); 
    } 
} 

이 변경으로 인해 루프가 필요하기 전에 if 테스트가 불필요합니다.

+0

답장을 보내 주셔서 감사합니다. 오늘 나중에 시도해 보겠습니다. 몇 시간 후에 답변을 드리겠습니다. –

+0

감사합니다. 이제 모든 사항이 정확합니다. . –

+0

안녕하세요 @DNT. 너는 전에 나를 도왔다. 다시는 나를 도울 수 있겠는가. 이번에는 다른 종류의 문제가있다. http://stackoverflow.com/questions/23233993/how-to-declare-a-font-variable-properly 또는 http://stackoverflow.com/questions/23189706/how-to-use-properly을 (를) font-as-a-variable로 알려주십시오. 어떻게 제대로 할 수 있는지 말해 줄 수 있습니까? –

관련 문제