P039 二维数组的字符按列存放到字符串中 ★★

03-程序设计题 软件121, 唐鼎威 1011浏览

所属年份:2010.9;2011.9;2012.3
请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
例如,若二维数组中的数据为
W W W W
S S S S
H H H H
则字符串中的内容应是:WSHWSHWSHWSH。

#include<stdio.h>
#define  M  3
#define  N  4
void fun(char (*s)[N],char *b)
{

}

int main()
{
    FILE *wf;
    char a[100],w[M][N]= {{ 'W', 'W', 'W', 'W'},{'S', 'S', 'S', 'S'},{'H', 'H', 'H', 'H'}};
    int i,j;
    printf("The matrix:\n");
    for(i=0; i<M; i++)
    {
        for(j=0; j<N; j++)
            printf("%3c",w[i][j]);
        printf("\n");
    }
    fun(w,a);
    printf("The A string:\n");
    puts(a);
    printf("\n\n");
    /******************************/
    wf=fopen("out.dat","w");
    fprintf(wf,"%s",a);
    fclose(wf);
    /*****************************/
    return 0;
}

【解题思路】

看到程序后,很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。
注意第1个循环条件为 i < N(即列),第2个循环条件为 j < M(即行),因为在循环的嵌套中越在内层,循环变化就越快。 【参考答案】 [cpp] void fun(char (*s)[N],char *b) { int i, j, k=0; for(i=0; i<N; i++) /*按列的顺序依次放到一个字符串中*/ for(j=0; j<M; j++) b[k++] = s[j][i]; b[k]='\0'; } [/cpp]