C - 添加2D char数组的元素

时间:2016-03-14 07:25:01

标签: c arrays

我正在尝试添加2D char数组的行和列。这样他们就形成了一个词。我知道如何添加2D int数组的元素,并试图在这里实现类似的解决方案。但它不起作用。

Example input:
a  b  c  d
e  f  g  h
i  j  k  l

Example Output:
Row 1 word = abcd
Row 2 word = efgh
Row 3 word = ijkl

以下是代码:

#include <stdio.h>

int main()
{
    unsigned int size;
    char wordR;

    printf("Enter size:\n");
    scanf("%d",&size);

    char word[size][size];

    //Entering the matrix
    for (int k = 0; k < (size); ++k){
        for (int j = 0; j < (size); ++j){
            printf("Enter letter: ");
            scanf(" %c",&word[k][j]);
        }
    }

    for (int k = 0; k < size; ++k){
        for(int j = 0; j < size; ++j){
            printf(" %c",word[k][j]);
        }
        printf("\n");
    }

    //Adding row elements
    for(k = 0; k < size; ++k){
        for(p = 0; p < size; ++p){
            wordR += size[k][p];
        }
        printf("Word of the %i row is = %c\n",k,wordR);
    }
}

3 个答案:

答案 0 :(得分:3)

以下是精炼代码:

#include <stdio.h>

int main(void)
{
    unsigned int size;

    printf("Enter size:\n");
    scanf("%u", &size); // size is unsigned, so use %u.

    char word[size][size];
    char wordR[size + 1]; // +1 for the terminating '\0'
    wordR[size] = '\0'; // wordR[size] will always be '\0'.

    int  i, j;

    //Entering the matrix
    for (i = 0; i < size; ++i){
        for (j = 0; j < (size); ++j){
            printf("Enter letter: ");
            scanf(" %c",&word[i][j]);
        }
    }

    for (i = 0; i < size; ++i){
        for(int j = 0; j < size; ++j){
            printf(" %c",word[i][j]);
        }
        printf("\n");
    }

    //Adding row elements
    for(i = 0; i < size; ++i){
        for(j = 0; j < size; ++j){
            wordR[j] = word[i][j];
        }
        printf("Word of the %i row is = %s\n", i, wordR);
    }
}

这是声明

wordR += size[k][p];

阻止您的代码正常工作。可能你认为这会神奇地连接一个字符串,但不幸的是,它只是在size[k]中加上字符的ascii值。无论如何,wordR在您的代码中定义为char,单个char如何包含整个字符串(即char数组)?

您的代码中也存在一些小问题,我已对其进行了一些更改。有关详细信息,请参阅注释。

答案 1 :(得分:2)

  

wordR + = size [k] [p];

这并不像你想象的那样有效。 它不是在C中连接字符串的方法。

此外wordTchar,这意味着它是单个字符。 你在上面做的是对ASCII字符代码进行简单的数学运算。

答案 2 :(得分:2)

一些主要问题:首先,变量wordR单个字符,实际上并不是&#34;字&#34;。您需要 array 字符来创建字符串。第二个问题是,即使您使用了一组字符,也无法使用+=附加到数组。

您还必须记住C中的字符串是零终止的。因此,一个包含四个字符的字符串实际上包含五个字符,包括终止符'\0'。在您的情况下,您需要一组size + 1个字符。