2015-05-07 3 views
1

Эй, очень новый для c/C++, и надеялся, что меня удастят в правильном направлении по исправлению моих ошибок.C/C++ Ввод строки в двумерный массив?

Я создаю программу, которая открывает файл и читает текст в файле и помещает его в строку. Оттуда я создаю двухмерный массив, который находит его размер, получая квадратный корень из самого маленького идеального квадрата, в который может вписаться строка. Теперь мы добираемся до того, где у меня возникают проблемы, с этого шага я пытаюсь string в строку массива по столбцу, используя следующий код.

  char newarray[b][b]; //b being the square root of the closest perfect square. 
    57 
    58  //put string into arrray; 
    59  for(int row=0; row < b; row++) 
    60  { 
    61   for(int column=0;column < b; column++) 
    62   { 
    63    newarray[row][column] = newstring[row]; 
    64   } 
    65  } 

Но когда я печатаю этот массив, он выводится там, где каждая отдельная буква текста заполняет каждый элемент этой строки.

т.е.

string s= "supercalifragilistic"; 
char[5][5]; 

// I want it to come out like this 
0 1 2 3 4 5 
1 s u p e r 
2 c a l i f 
3 f r a g i 
4 l i s t i 
5 c 

//but it comes out like this 
0 1 2 3 4 5 
1 s s s s s 
2 u u u u u 
3 p p p p p 
4 e e e e e 
5 r r r r r 
+1

новый товар [ряд] [колонка] = новая строка [ряд + b * столбец]; –

+0

поэтому C ** xor ** C++? Вы не можете программировать на двух языках одновременно. Решение зависит от того, какой язык вы используете. –

ответ

3

Используйте другой индекс для исходной строки.

char newarray[b][b]; //b being the square root of the closest perfect square. 

//put string into arrray; 
int i=0; 
for(int row=0; row < b; row++) 
{ 
    for(int column=0;column < b; column++, i++) 
    { 
    newarray[row][column] = newstring[i]; 
    } 
} 
0

Ваш вопрос не содержит достаточной информации, но если я понял вашу проблему правильно, внутри внутренней for петли, вы не приращением индекс для newstring.

Вам нужно изменить

newarray[row][column] = newstring[row]; 

в

newarray[row][column] = newstring[(row * b) +column]; 
+1

Вы имеете в виду [row * b + column]? – ZunTzu

+0

@ZunTzu Да, правильно. Благодарю. ;-) –

1

Используйте другой индекс для перемещения строки.

В текущем коде, сделайте изменение:

int k=0; 
for(int row=0; row < b; row++) 
    { 
     for(int column=0;column < b; column++) 
     { 
      newarray[row][column] = newstring[k++]; 
     } 
    } 

Это объясняется тем, что в предыдущем коде, это как newarray был заполнен:

Say, b = 2 

newarray[0][0] = newstring[0]; 
newarray[0][1] = newstring[0]; 
newarray[0][2] = newstring[0]; 
newarray[1][0] = newstring[1]; 
newarray[0][1] = newstring[1]; 

и так далее.

Однако, вы хотели что-то вроде:

newarray[0][0] = newstring[0]; 
newarray[0][1] = newstring[1]; 
newarray[0][2] = newstring[2]; 
newarray[1][0] = newstring[3]; 
newarray[0][1] = newstring[4]; 

и так далее. Один из способов - использовать переменную, например k, от 0 до string length для newstring.

2

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

char newarray[b][b]; //b being the square root of the closest perfect square. 
int counter = 0; 

for(int row = 0; row < b; row++){ 
    for(int column=0;column < b; column++){ 
    newarray[row][column] = newstring[counter]; 
    counter++; 
    }  
} 
Смежные вопросы