#include<stdio.h>
#include<string.h>
int main(void)
{
char arr1[]="什么!是快乐星球!!";
char arr2[]="####################";
int left=0;
int right=strlen(arr1)-1;
while(left<=right)
{
arr2[left]=arr1[left];
arr2[right]=arr1[right];
left++;
right--;
printf("%s\n",arr2);
}
return 0;
}
实现结果
?#################?
什################!
什?#############。?
什么############!!
什么?#########颍。?
什么!########球!!
什么!?#####乔颍。?
什么!是####星球!!
什么!是?#中乔颍。?
什么!是快乐星球!!
这个结果队形为啥是这样的???多了一些我没有的
上面的代码在Dev-C++ 5.11下测试发现,里面的中文字符长度是两个字节,所以上面的代码每次复制一个字符的数据会导致输出异常。
修改如下:
参考链接:
#include<stdio.h>
#include<string.h>
int main(void)
{
//https://ask.csdn.net/questions/7440145?spm=1005.2025.3001.5141
char arr1[]="什么!是快乐星球!!";
// char arr1[]="他";
char arr2[]="####################";
// char arr2[]="##";
// https://www.zhihu.com/question/557033535?utm_id=0
// 经过测试发现,上面的中文字符 占两个字节长度
// printf("strlen(arr1)=%d\n",strlen(arr1));
int left=0;
int right=strlen(arr1)-1;
while(left<=(right))
{
// 将要更新显示的数组在 左侧 依次赋值为要显示的字符数组里的两个字符
arr2[left]=arr1[left];
arr2[left+1]=arr1[left+1];
// 将要更新显示的数组在 右侧 依次赋值为要显示的字符数组里的两个字符
arr2[right]=arr1[right];
arr2[right-1]=arr1[right-1];
left+=2;// 左侧 往后 移动 两个 字符位置
right-=2; //右侧 往前 移动 两个 字符位置
printf("%s\n",arr2);
}
return 0;
}