C / C 将字符串放入二维数组中

C / C++ Putting a string into a two dimensional array?

本文关键字:二维数组 字符串      更新时间:2023-10-16

嘿,非常新手C/C ,希望我能朝着正确的方向推动解决错误。

我正在创建一个程序,该程序打开文件并在文件中读取文本并将其放入字符串中。从那里,我创建了一个二维数组,通过获取琴弦可以适合最小的完美正方形的平方根来找到它的大小。使用以下代码将字符串列入数组行中。

          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

对源字符串使用不同的索引。

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];
  }
}

您只需要声明一个整数变量即可指定字符串的哪个字符,并在每个分配后将其递增。

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++;
  }     
}

使用不同的索引来遍历字符串。

在当前代码中,进行修改:

 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];

等等。一种方法是使用变量,例如k0string length,对于newstring

您的问题不包含足够的信息,但是如果我正确理解您的问题,在内部for循环内,您不会为newstring增加 index

您需要更改

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

to

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