使用给定字符串的字母逐列打印方形矩阵,重复的字母用空格分隔。方形矩阵的大小应根据填充给定字符串中字符所需的单元格计算。
例:
输入(字符串):
HELLOWORLD
输出(方块 - 矩阵):
---0 1 2 3
0 H L R
1 E O L
2 L W D
3 --O
----------------------------结束问题---------------- ----------
我的c-program:
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();
}
我没有得到所需的输出。请帮助代码。 感谢。
另外帮助我如何声明矩阵arr [X] [X]动态对应用户输入字符串如果需要3x3矩阵则说“WELCOME”。
答案 0 :(得分:0)
要动态调整大小,您应该选择cmath
库并使用sqrt
和ceil
函数
为什么ceil
,以防你的字符串长度不是一个完美的正方形。
int dim = (int) ceil(sqrt(sizeof(a)/sizeof(char)));
char arr[dim][dim];
接下来迭代字符串,并使用row
和col
整数变量迭代矩阵
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] = '.';
答案 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);
}