2017-07-20 55 views
0

用垂直於給定字符串的字母垂直逐列打印矩形矩陣,並用空格分隔重複字母。矩形矩陣的大小應根據填充所需的單元格計算給定字符串中的字符。按字母列將字符串打印爲矩陣

實施例:
輸入(字符串):

HELLOWORLD

輸出(方塊 - 矩陣):

---0 1 2 3 

    0 H L R 

    1 E O L 

    2 L W D 

    3 --O 

-------------- --------------問題結束--------------------------

我的c-程序:

void main() 

{ 

char arr[4][4],a[]="HELLOWORLD"; 

int i,j,n=0; 

clrscr(); 

for(i=0;i<4;i++) 

{ 

    for(j=0;j<4;j++) 

    { 

     if(a[n]!=a[n+1]){ 

     arr[j][i]=a[n]; 

     n++;} 

     else 

     arr[j][i]=' '; 

    } 

} 

for(i=0;i<4;i++){ 

for(j=0;j<4;j++){ 

printf("%c",arr[i][j]);}} 

getch(); 

} 

我沒有得到所需的輸出。請仔細閱讀代碼。 謝謝。

如果需要3x3矩陣,我還應該如何聲明矩陣arr [X] [X]動態地對應於用戶輸入字符串「WELCOME」。

+1

我建議你閱讀Eric Lippert的[如何調試小程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/),並學習如何使用一個逐行掃描你的代碼的調試器。 –

+1

你應該縮進你的代碼。 –

回答

0

這樣的:

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <string.h> 

void square_output(const char *mes); 

int main(void){ 
    square_output("HELLOWORLD"); 
    puts(""); 
    square_output("WELCOME"); 
    return 0; 
} 

void square_output(const char *mes){ 
    char *str = malloc(strlen(mes)*2); 
    char *cp = str; 
    char *matrix; 
    int side, exp_len, mat_size; 
    //separate of duplicate letter by ' ' 
    while(*mes){ 
     *cp++ = *mes++; 
     if(mes[-1] == *mes) 
      *cp++ = ' '; 
    } 
    *cp = 0; 

    exp_len = cp - str; 
    side = ceil(sqrt(exp_len));//dim 
    mat_size = side * side; 
    matrix = malloc(mat_size);//1D array 
    memset(matrix, ' ', mat_size);//initialize by ' ' 
    memcpy(matrix, str, exp_len); 
    { //print 
     int c, r; 
     for(c = 0; c < side; ++c){ 
      for(r = 0; r < side; ++r){ 
       if(r) 
        putchar(' '); 
       putchar(matrix[r * side + c]);//This means matrix[r][c] in 2D 
      } 
      puts("\n"); 
     } 
    } 
    free(matrix); 
    free(str); 
} 
+0

@ BLUEPIXY幫助。 https://stackoverflow.com/questions/45211559/finding-nth-power-of-integer-m-through-c-program –

0

動態獲取,你應該選擇了cmath庫的大小和使用sqrtceil功能

爲什麼ceil,如果你的字符串長度是不是一個完美的廣場上。

int dim = (int) ceil(sqrt(sizeof(a)/sizeof(char))); 
char arr[dim][dim]; 

在接下來的字符串迭代,並使用rowcol整型變量在你的矩陣

int row=0, col=0; 
for (i=0; i<sizeof(a)/sizeof(char); i++) { 
    arr[row][col] = a[i]; 

    col++; 
    if (col>=dim) { 
     col = 0; 
     row++; 
    } 
} 

迭代,如果您擔心未使用的電池如果字符串長度是不是一個完美的正方形然後早期初始化基質上

for (i=0; i<dim; i++) 
    for (j=0; j<dim; j++) 
     arr[i][j] = '.'; 
+0

由於可能會插入空格,因此'dim'計算應該使用結果的長度。 – BLUEPIXY

+0

int dim =(int)ceil(sqrt(sizeof(a)/ sizeof(char))); char arr [dim] [dim];我收到編譯錯誤說「需要恆定值」。一旦聲明char arr [4] [4]而不是dim,它就會運行。有沒有辦法用char arr運行[dim] [dim];? –

+0

@VineethMourya如果您不能使用VLA,請使用'malloc'。 – BLUEPIXY