【问题标题】:C / C++ Putting a string into a two dimensional array?C / C ++将字符串放入二维数组?
【发布时间】:2015-05-07 07:31:10
【问题描述】:

嘿,我对 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

【问题讨论】:

  • newarray[row][column] = newstring[row + b*column];
  • 所以 C xor C++?你不能同时用两种语言编程。解决方案很大程度上取决于您使用的语言。

标签: c++ c arrays string stdin


【解决方案1】:

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

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

【讨论】:

    【解决方案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++;
      }     
    }
    

    【讨论】:

      【解决方案3】:

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

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

       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,将newstring0 变为string length

      【讨论】:

        【解决方案4】:

        您的问题没有包含足够的信息,但如果我正确理解了您的问题,在内部 for 循环内,您不会增加 newstring索引

        你需要改变

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

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

        【讨论】:

        • 你的意思是 [row*b+column] 吗?
        猜你喜欢
        • 1970-01-01
        • 2019-08-04
        • 1970-01-01
        • 1970-01-01
        • 2015-11-21
        • 2014-02-07
        • 2016-02-22
        • 2011-06-22
        • 1970-01-01
        相关资源
        最近更新 更多