7-5 古风排版
题目链接:https://pintia.cn/problem-sets/1021197786124881920/problems/1021199918152519680
#include<stdio.h>
#include<string.h>
//#include<string>
//using namespace std;
int main(){
char a[1010];
int n;
scanf("%d",&n);
getchar();
gets(a);
int len;
len=strlen(a);
//printf("%d\n",strlen(a));
int m;
if(strlen(a)%n!=0){
m=strlen(a)/n+1;
}else{
m=strlen(a)/n;
}
//printf("%d\n",m);
char b[n][m];
memset(b,' ',sizeof(b));
int p=0;
for(int j=(m-1);j>=0;j--){
for(int i=0;i<n;i++){
//int p=n*(m-j-1)+i;
b[i][j]=a[p++];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%c",b[i][j]);
}
//if(i!=n-1)
printf("\n");
}
return 0;
}
问题已解决,问题在于对字符串b进行赋值时超过了字符串a的范围
这样就会造成出现乱码的情况
解决办法有两个
1.对字符数组b进行赋值时,需要限制a的范围,在达到边界时就停止赋值
2.在字符串a后加大量的空格
还有一点要说的是,使用gets()函数前需要输入数值时,需要在gets()函数前加上getchar();