一道C语言初学的题目。

题目:
编写一个程序,首先要求用户输入名字,然后要求用户输入姓氏。在一行打印输入的姓名,在下一行打印每个名字中字母的个数。把字母个数与相应名字的结尾对其,如下所示:
Melissa Honeybee
7 8
然后打印相同信息,但是字母个数与相应单词的开始对齐。
Melissa Honeybee
7 8

这个是我写的一半,不知道如何和实现结尾对齐。

#include <stdio.h>
#include <string.h>
int main(void)
{
char fname[20];
char lname[20];
printf("Please input your fname.\n");
scanf("%s",fname);
printf("Please input your lname.\n");
scanf("%s",lname);
printf("%s%3s\n",fname,lname);
return 0;
}
谁能帮我解答一下。谢谢!

获取字符串长度,c++函数strlen()
参考http://zhidao.baidu.com/question/318657414.html?fr=qrl&cid=866&index=1&fr2=query
然后做一个字符串输出,内容是需要的空格+字符串长度值,注意判断字符串长度值的位数。
判断字符串长度值的位数可以用条件判断,如0~10为一位数,10~100为两位数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-13

#include <stdio.h>

#include <string.h>

int main(void)

{

int i, fnLen,lnLen;

char fname[20];

char lname[20];

printf("Please input your fname.\n");

scanf("%s",fname);

    printf("Please input your lname.\n");

scanf("%s",lname);

fnLen = strlen(fname);

lnLen = strlen(lname);

///1///

printf("%s %s\n",fname,lname);

printf("%d",fnLen);

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

{

printf(" ");

}

printf("%d\n",lnLen);

///2//

printf("%s %s\n",fname,lname);

for (i=0;i<fnLen-1;i++)

{

printf(" ");

}

printf("%d",fnLen);

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

{

printf(" ");

}

printf("%d\n",lnLen);

    return 0;

}

第2个回答  2012-04-13
#include <stdio.h>
#include <string.h>

int main(void)
{
char fname[20];
char lname[20];
int i,lenf,lenl,j;
char temp[20];
char ftemp[20];
char ltemp[20];
char *fnlen=ftemp;
char *lnlen=ltemp;
printf("Please input your fname.\n");
scanf("%s",fname);
printf("Please input your lname.\n");
scanf("%s",lname);
printf("%s %3s\n",fname,lname);

lenf = strlen(fname);
lenl = strlen(lname);
//开头对齐
sprintf(fnlen, "%d ",lenf);
for(i = strlen(fnlen); i < lenf; i++)
{
ftemp[i] = ' ';
}
ftemp[lenf] = '\0';

sprintf(lnlen, "%d ",lenl);
for(i = strlen(lnlen); i < lenl; i++)
{
ltemp[i] = ' ';
}
ltemp[lenl] = '\0';
printf("%s %s\n",fnlen,lnlen);

//结尾对齐
fnlen=temp;
sprintf(fnlen, "%d ",lenf);
for(i = 0; i < lenf - strlen(fnlen)+1; i++)
{
ftemp[i] = ' ';
}
for(i = lenf - strlen(fnlen)+1,j=0; i < lenf; i++,j++)
{
ftemp[i] = temp[j];
}
ftemp[lenf] = '\0';

lnlen=temp;
sprintf(lnlen, "%d ",lenl);
for(i = 0; i < lenl - strlen(lnlen)+1; i++)
{
ltemp[i] = ' ';
}
for(i = lenl - strlen(lnlen)+1,j=0; i < lenl; i++,j++)
{
ltemp[i] = temp[j];
}
ltemp[lenl] = '\0';
printf("%s %s\n",ftemp,ltemp);
return 0;
}
第3个回答  2012-04-13
#include <stdio.h>
#include <string.h>
int main(void)
{
char fname[20];
char lname[20];
printf("Please input your fname.\n");
scanf("%s",fname);
printf("Please input your lname.\n");
scanf("%s",lname);
printf("%s %s\n",fname,lname);
printf("%*d %*d\n",strlen(fname),strlen(fname),strlen(lname),strlen(lname));
return 0;
},你试试,这个问题是输出时,数据所占字段宽度的问题,也许你之前见过“%10d”,这样的用法,这是指明要求输出的数据占的字段宽度,但是printf还有一种用法就是将字段宽度设为变量的形式,“%*d”,然后在后面加上“*”所对应的值就可以了,一般默认是右对齐,左对齐写成“%-*d”的形式就可以了。本回答被提问者采纳
第4个回答  2012-04-13
===================================================
我的程序是通用的,随便输入多少个字符和空格。
===================================================
#include <stdio.h>
#include <string.h>
int main(void)
{
char fname[200];
int count=0,count2=0,count3=0,count4=0,count5=0,count6=0;
printf("输入姓名:\n");
gets(fname);
puts(fname);
for(int i=0;i<strlen(fname);i++)
{ count2++;
if(fname[i]!=' ')count++;
if((fname[i]!=' '&&fname[i+1]==' ')||fname[i+1]=='\0')
{ for(int j=1;j<count2;j++)
printf(" ");
printf("%d",count);
count=0;
count2=0;
}
}
printf("\n");
puts(fname);
for(int i=0;i<strlen(fname);i++)
{ count2++;

if(fname[i]!=' ')count++;
if((fname[i]!=' '&&fname[i+1]==' ')||fname[i+1]=='\0')
{
for(int j=1;j<=count2-count-count6;j++)
{ printf(" ");
count3++;
}
count6=count2-count+1;
printf("%d",count);
count=0;
count4=count3;
count3=0;
}

}
return 0;
}
相似回答