2014-12-29 1 views
-2

파일의 문자 인 문자를 2 차원 배열로 저장하려고합니다. 첫 번째 줄의 마지막 단어로 끝나면 다음 줄로 가서 같은 것을하고 싶다. (필자는 필자가 본문에 4 줄을 가지고 있다고 가정). 내가 그것을 영원히가는 내 프로그램이 경고음을 인쇄 할 때C/C++ - 파일에서 2 차원 문자 배열로 문자 저장

void getPoem(char *filePath){ 
    ifstream f(filePath); 

    int NumberOfRows=0; 
    int NumberOfColumns=-1; 
    int NumberOfColumns_Clone=-1; 
    char matrix[100][100]={0}; 
    char s[100]; 
    do{ 
     f.getline(s, 100, '\n'); 
     for(int i=strlen(s)-1;i>=0;i--) 
      if(isalpha(s[i])) 
      matrix[NumberOfRows][++NumberOfColumns]=s[i]; 
     matrix[NumberOfRows][++NumberOfColumns]=NULL; 
     NumberOfColumns--; 
     NumberOfColumns_Clone=NumberOfColumns; // I used this so i don't lose the nr_of_columns 
     NumberOfColumns=0; 
     NumberOfRows++; 
     matrix[NumberOfRows][NumberOfColumns]='\0'; 
    } 
    while(NumberOfRows<4); 

     for (int i = 0; i<=NumberOfRows; i++){ 
      for (int j = 0; j<=NumberOfColumns_Clone; j++) 
       cout << matrix[i][j] << " "; 
      cout << endl; 
     } 
     cout << endl; 
    } 

내 출력 끔찍한 :

여기 내 코드입니다. 나는 그것이 나쁘다는 것을 알고있다. 나는 단지 내가 잘못했는지 알고 싶다.

"string"을 사용하고 싶지 않으므로 "char"와 어려움을 겪고 있습니다.

도움을 주시면 감사하겠습니다. 정말 고마워요!

+2

왜 디버거를 사용하지 않습니까? 당신은 버그를 발견하고 당신은 또한 뭔가를 배울 것입니다 ... – 23ars

+0

나는 그것을 사용했고, 그 매트릭스는 내가 필요로하는 단어를 가지고 또한 그 뒤에 공백 문자를 가지고 있으며, 그것을 해결하는 방법을 모르겠다는 것을 보여줍니다 . – Lazai

답변

0

NumberOfColumnsNumberOfColumns_Clone은 루프에서 단순 변수입니다. 루프의 끝에서 마지막 반복 값을 가지며 이전 값은 모두 손실됩니다.

당신 수 :

  • 중 배열에 NumberOfColumns_Clone을 변경하고 각 행

    int NumberOfColumns_Clone[100]; 
    ... 
        NumberOfColumns_Clone[NumberOfRows]=NumberOfColumns; // I used this so i don't lose the nr_of_columns 
    ... 
        for (int i = 0; i<=NumberOfRows; i++){ 
         for (int j = 0; j<=NumberOfColumns_Clone[i]; j++) 
          cout << matrix[i][j] << " "; 
         cout << endl; 
        } 
    
  • 의 크기를 유지하거나 구분

    for (int i = 0; i<=NumberOfRows; i++){ 
         for (int j = 0; j<=NumberOfColumns_Clone[i]; j++) { 
          if (matrix[i][j] = 0) break; // exit from inner loop on terminating null 
          cout << matrix[i][j] << " "; 
         } 
         cout << endl; 
        } 
    
로 널을 사용
0

이 기능을 다시 작성했습니다.이 기능이 도움이되기를 바랍니다.

void getPoem(char *filePath) 
{ 
    ifstream f(filePath); 
    int numberOfRows=0; 
    int numberOfColumns=0; 
    char matrix[100][100]; 
    char s[100]; 
    int i; 
    do 
    { 
     f.getline(s,100); 
     for(i=0;i<strlen(s);i++) 
      if(isalpha(s[i])) 
      { 
       matrix[numberOfRows][numberOfColumns++]=s[i]; 

      } 
    numberOfRows++; 
    numberOfColumns=0; 
    }while(numberOfRows<4); 
    int j; 
    for(i=0;i<numberOfRows;i++) 
    { 
     for(j=0;j<100;j++) 
     { 
      cout<<matrix[i][j]; 
     } 
    cout<<endl; 
    } 
} 

당신에게 조금 도움이되도록 , 나는 쓸 것이다 무슨 실수 당신은 한 :

경고 : '문자 [100]'에 대한 초기화 주위에 괄호 누락 [-Wmissing-괄호]

경고 : NULL에서 포인터가 아닌 유형 'char'로 변환 [-Wconversion-null]

간단한 경고는 있지만 결과가 결과에 영향을 미치는지 확인하십시오.

관련 문제