【问题标题】:Replace the first line with spaces用空格替换第一行
【发布时间】:2009-12-03 10:20:11
【问题描述】:

我正在尝试用空格替换第一行,这里有什么问题?

#include <stdio.h>
int main(void){
    char text[5][10]={
        {'a','a','a','a','a','a','a','a','a','\0'},
        {'a','a','a','a','a','a','a','a','a','\0'},
        {'a','a','a','a','a','a','a','a','a','\0'},
        {'a','a','a','a','a','a','a','a','a','\0'},
        {'a','a','a','a','a','a','a','a','a','\0'},
    };


    for (int i=0;i<10;i++){
        text[i]=' ';
    }

    for (int i=0;i<5;i++){
        printf("%s\n",text[i]);
    }

    return 0;
}

【问题讨论】:

    标签: c replace multidimensional-array


    【解决方案1】:

    你有两个问题。

    1. 您只在第一个循环中提供一个维度。应该是:

      text[0][i]=' ';
    2. 您只有 9 个 'a',但要替换为 10 个空格,因此您将覆盖第一行的空终止符。所以我认为你的整个循环应该是:

    对于 (int i=0;i

    【讨论】:

    • 在处理多维数组时使用单一维度在 C 中是完全合法的。问题仅在于解决方案中提到的第二个问题,您尝试替换 10 'a' 并且有数组的每一行只有 9 个。
    【解决方案2】:

    你必须使用

    for (int i=0;i<10;i++){
            text[0][i]=' ';
        }
    

    现在text 将是

    text[5][10]={
                                      {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
                                      {'a','a','a','a','a','a','a','a','a','\0'},
                                      {'a','a','a','a','a','a','a','a','a','\0'},
                                      {'a','a','a','a','a','a','a','a','a','\0'},
                                      {'a','a','a','a','a','a','a','a','a','\0'},
                                      };
    

    或者

    for (int i=0;i<5;i++){
            text[i][0]=' ';
        }
    

    现在text 将变为

    text[5][10]={
                                      {' ','a','a','a','a','a','a','a','a','\0'},
                                      {' ','a','a','a','a','a','a','a','a','\0'},
                                      {' ','a','a','a','a','a','a','a','a','\0'},
                                      {' ','a','a','a','a','a','a','a','a','\0'},
                                      {' ','a','a','a','a','a','a','a','a','\0'},
                                      };
    

    选择您想要的任何解决方案。 :)

    【讨论】:

    • 它并没有将 'a' 向后推,而是将所有行的第 0 个索引中的值更改为 ' '[space] :),所以有 1 个空格,9 个 'a' 和 1 '\0' 在每一行。
    【解决方案3】:

    您不是在“跨越”索引,而是在“向下”索引。试试:

    text[0][i] = ' ';
    

    覆盖第一行的字符。

    另请注意,您有一个Obi-wan;您的循环也会用空格覆盖终止字符。

    【讨论】:

    • 字符指针在哪里?它只是一个包含 50 个元素的平面数组。应该编译没有问题。
    • @Kosi2801:糟糕,我错了。谢谢,已修复。
    【解决方案4】:

    我会更进一步 - 您正在覆盖第一“行”末尾的空值。将循环设置为迭代 0..9:

    for (int i=0;i<9;i++){
            text[0][i]=' ';
    }
    

    【讨论】:

    • 啊,干杯!我想知道为什么它只是将 a 向后推 (int i=0;i
    【解决方案5】:

    我认为你应该适应

    text[i][0] = ' ';
    

    【讨论】:

    • 第一行...而不是 text[0][i] 而不是 text[i][0]
    • 抱歉,发帖 - 我同意 ammoQ
    【解决方案6】:
     for (int i=0;i<9;i++){
         text[0][i]=' ';
     }
    

    【讨论】:

      【解决方案7】:
      • 将数组长度设为 11,如: char text[5][10] 到 char text[5][11] 并相应地更改初始化。

      • 将 for 循环,条件 'i

      问题在于索引计数。

      【讨论】:

        【解决方案8】:

        它的二维数组而不是一维数组,这就是为什么这不起作用。

        【讨论】:

        • 在 C 语言中是完全合法的。char[5][10] 与 char[50] 相同,并且您可以通过两种方式访问​​数组。
        猜你喜欢
        • 2015-05-30
        • 2014-05-16
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 2018-04-11
        • 1970-01-01
        • 2012-07-06
        • 2023-03-04
        相关资源
        最近更新 更多