2014-12-29 2 views
-2

Я пытаюсь сохранить символы, которые являются буквами из файла в двухмерном массиве, и после того, как я закончил с последним словом в первой строке, я хотите перейти к следующей строке и сделать то же самое. (Я предположил, что у меня есть 4 строки в моем тексте).C/C++ - Сохранение символов из файла в массив 2d char

Вот мой код:

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

NumberOfColumns и NumberOfColumns_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-распорки]

предупреждение: преобразование в не указательный тип «char» из NULL [-Wconversion-null]

Простые предупреждения, но убедитесь, что они будут влиять на результаты.

Смежные вопросы