#include "stdio.h"
//将整型num转换为字符窜,放在s字符指针的前面
//例如 num = 1234,char array [0][1][2][3][4][5][6][7];
//s指向[7],则:char array [0][1][2][3][4]=1[5]=2[6]=3[7]=4;
int int_to_string(char *s,unsigned int num)
{
int i = 0;//统计有多少位
do
{
*s = num % 10 + '0';//将最低位数转换为字符
num /= 10;//去掉最低位
s--;
i++;
}while(num);
return i;
}
int main ()
{
int ming_len;//名 字符串的长度
int xing_len;//姓 字符串的程度
char *ming,*xing, *temp;
printf("name=");
scanf("%s",temp);
ming_len = strlen(temp);//获得 名 字符串的长度
ming = (char *)malloc(ming_len);//为 名 字符串分配空间
strcpy(ming,temp);//将 名 拷贝到申请的空间里
printf("fname=");
scanf("%s",temp);
xing_len = strlen(temp);//获得 姓 字符串的长度
xing = (char *)malloc(xing_len);//为 姓 字符串分配空间
strcpy(xing,temp);//将 姓 拷贝到申请的空间里
//为了简便,申请两个等于 名长度 + 空格 + 姓长度 大小的空间,然后想办法将数字填到相应的位置就可以了
char *space_one,*space_two;
space_one = (char *)malloc(ming_len+xing_len+2);
space_two = (char *)malloc(ming_len+xing_len+2);
memset(space_one, ' ',ming_len+xing_len+1);//使用空格填充
space_one[ming_len+xing_len+1] = '\0';//设置字符结束符号
strcpy(space_two,space_one);//让space_two也填充上空格,设置好结束符号
//有可能 姓 或 名 字符串很长(超过1位数……),所以要记录有几位数(转换为字符的个数)
int ming_len2str_len,xing_len2str_len;
//数字转换为字符串,右对齐
ming_len2str_len = int_to_string(&space_one[ming_len-1],ming_len);
xing_len2str_len = int_to_string(&space_one[ming_len+xing_len],xing_len);
printf("%s %s\n",ming,xing);//输出右对齐的版本
printf("%s\n",space_one);
//左对齐
strncpy(&space_two[0],&space_one[ming_len-ming_len2str_len],ming_len2str_len);
strncpy(&space_two[ming_len+1],&space_one[ming_len+xing_len-xing_len2str_len+1],xing_len2str_len);
printf("%s %s\n",ming,xing);//输出左对齐的版本
printf("%s\n",space_two);
return 0 ;
}
//将整型num转换为字符窜,放在s字符指针的前面
//例如 num = 1234,char array [0][1][2][3][4][5][6][7];
//s指向[7],则:char array [0][1][2][3][4]=1[5]=2[6]=3[7]=4;
int int_to_string(char *s,unsigned int num)
{
int i = 0;//统计有多少位
do
{
*s = num % 10 + '0';//将最低位数转换为字符
num /= 10;//去掉最低位
s--;
i++;
}while(num);
return i;
}
int main ()
{
int ming_len;//名 字符串的长度
int xing_len;//姓 字符串的程度
char *ming,*xing, *temp;
printf("name=");
scanf("%s",temp);
ming_len = strlen(temp);//获得 名 字符串的长度
ming = (char *)malloc(ming_len);//为 名 字符串分配空间
strcpy(ming,temp);//将 名 拷贝到申请的空间里
printf("fname=");
scanf("%s",temp);
xing_len = strlen(temp);//获得 姓 字符串的长度
xing = (char *)malloc(xing_len);//为 姓 字符串分配空间
strcpy(xing,temp);//将 姓 拷贝到申请的空间里
//为了简便,申请两个等于 名长度 + 空格 + 姓长度 大小的空间,然后想办法将数字填到相应的位置就可以了
char *space_one,*space_two;
space_one = (char *)malloc(ming_len+xing_len+2);
space_two = (char *)malloc(ming_len+xing_len+2);
memset(space_one, ' ',ming_len+xing_len+1);//使用空格填充
space_one[ming_len+xing_len+1] = '\0';//设置字符结束符号
strcpy(space_two,space_one);//让space_two也填充上空格,设置好结束符号
//有可能 姓 或 名 字符串很长(超过1位数……),所以要记录有几位数(转换为字符的个数)
int ming_len2str_len,xing_len2str_len;
//数字转换为字符串,右对齐
ming_len2str_len = int_to_string(&space_one[ming_len-1],ming_len);
xing_len2str_len = int_to_string(&space_one[ming_len+xing_len],xing_len);
printf("%s %s\n",ming,xing);//输出右对齐的版本
printf("%s\n",space_one);
//左对齐
strncpy(&space_two[0],&space_one[ming_len-ming_len2str_len],ming_len2str_len);
strncpy(&space_two[ming_len+1],&space_one[ming_len+xing_len-xing_len2str_len+1],xing_len2str_len);
printf("%s %s\n",ming,xing);//输出左对齐的版本
printf("%s\n",space_two);
return 0 ;
}