2013-11-10 4 views
1

Я пытаюсь заполнить 2-мерный массив символами. У меня есть следующий код, и он работает, но не корректно. Таким образом, проблема заключается в том, что весь массив заполняется '.' персонажи. Какая, по-моему, проблема? Почему каждое «слово» не входит в его собственный ряд?заполнение двумерного массива символами

char Table[10][50]; 
char block[100] = "the cat and the hat."; 
int pos = 0; 

while (pos < StrLen(block)) { 
    for(int i = 0; i < 10; i++) { 
     for(int y = 0; y < 50; y++) { 
      Table[i][y] = block[pos]; 
     } 
    } 
    pos++; 
} 

cout << Table[0][0] << " " << Table[0][1] << " " << Table[0][2] << endl; 
cout << Table[1][0] << " " << Table[1][1] << " " << Table[1][2] << endl; 

Результаты

. . . . 
. . . . 
+0

Вы увеличиваете 'pos' только после того, как заполненные петли заполняли весь массив. Таким образом, вы сначала заполняете все позиции массива 'block [0]', а затем переопределяете их с помощью 'block [1]' и т. Д. Наконец, вы переопределите их все с помощью 'block [strlen (block) -1]', который является '' .''. – jogojapan

+0

Подумайте об этом немного. Сколько раз вы устанавливаете 'table [0] [0]'? – Mat

+0

Где в приведенном выше коде вы пытаетесь найти «слова» в «блоке»? Если вы хотите найти слова, то где-то вы должны искать пространства, отделяющие слова. – john

ответ

0

Что вы хотите сделать что-то вроде этого, я думаю:

char Table[10][50]; 
char block[1000] = "the cat and the hat."; 
int pos = 0; 
int row = 0; 
int col = 0; 

while (pos < strLen(block)) { 
    if(block[pos] == ' ') 
    { 
     table[row][col] = '\0'; 
     row++; 
     col = 0; 
    } 
    else 
    { 
     table[row][col] = block[pos]; 
     col++; 
    } 
    } 
    pos++; 
} 

This ссылка может также помочь вам.

+0

OP говорит, что хочет выделить слова. – john

+1

Да, изменил мой ответ –

0

Как об этом

int row = 0; 
int col = 0; 
for (int pos = 0; pos < strlen(block); ++pos) 
{ 
    if (block[pos] == ' ') 
    { 
     Table[row][col] = '\0'; // make sure each row is null terminated 
     ++row;     // move to the next row 
     col = 0;    // starting at column zero 
    } 
    else 
    { 
     Table[row][col] = block[pos]; 
     ++col; 
    } 
} 

неопробованного коде.

В отличие от вашего кода он ищет пробелы во входном файле, что, если вы думаете об этом, в значительной степени требуется для разделения текста на слова.

0

Поскольку каждый раз, итерации внешнего цикла while, он перезаписывает таблицу [i] [y] ', удаляет внешний цикл и производит следующую модификацию.

char Table[10][50]; 
char block[1000] = "the cat and the hat."; 
int pos = 0; 

for(int i = 0; i < 10 && i<strlen(block); i++) { 
    for(int y = 0; y < 50; y++) { 
     Table[i][y] = block[pos];  
    } 
    pos++; 
} 
+0

Не могли бы вы объяснить, что делает ваш код и почему вы думаете, что это улучшение по сравнению с исходным кодом? Также обратите внимание, что в вашем коде 'pos' избыточно. Его можно заменить на 'i'. – jogojapan

+0

Я думал, что он хочет заполнить каждую строку символом в строке. Как он сказал: «Почему каждое« слово »не входит в его собственную строку, что в данном случае« слово », по-видимому, означает характер, поскольку исходный код ничего не делает о разделителе между словами. – Hawaiyon

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