c语言编写一个程序,根据用户输入英文名和姓先显示姓氏,其后跟一个逗号,然后显示名的首字母。
例如:Lloyd Fosdick
输出是: Fosdick,L.
注意:用户可能在名字前,名字和姓之间,名字后加空格,但输出结果不要空格!
我的想法是:按老外的习惯,他们的首字母会大写,弄俩字符串,分别记录名和姓,遇到大写,就是65到106开始,把名输到名的字符串里面,遇到第二个大写输到姓的字符串里面,然后输出。
可以根据输入名和姓中间的空格进行划分,至于划分的方法,如果是c语言,那就遍历字符串找到空格的位置,然后进行字符串的切片操作,如果是c++,直接有函数split进行操作。
在分割好后,先输出后面的字符串,再输出“,”,最后再输出字符串的第一个字母。
以上方法可行,老兄可以试试!!!
最简单的方法:设置一个str[MAX_SIZE]的一维数组(MAX_size看自己心情设置大小),然后for循环(也可以其他类型循环),一维数组的最后一个addr输出,判断空格,遇到空格后输出,str[0] 就完了。
如果想稍加完善,记得判断用户输入的姓和名的首字母是否大写,然后进行相应的转换。
可以先提交代码呀,看看是否是wrong answer,万一题目没有你想的那么复杂哩
哎呀,贴代码给你吧
int main()
{
char ch;
char chf[100];
char chl[100];
int i=0, j=0, k=0;
//录入字符串
while(scanf("%c", &ch) && ch!='\n')
{
chl[i]=ch;
i++;
}
//求前面的空格
for (int c=0;c if (chl[c]>=65 && chl[c]<=90)
break;
//去空格
for (int d=0;d<c;d++)
for (int e=c-1;e<i;e++)
chl[e-1]=chl[e];
i=i-c;
//找姓的首字母地址
for (j=1;j<i;j++)
if (chl[j]>=65 && chl[j]<=90)
break;
//录入姓
while (j<i)
{
chf[k]=chl[j];
k++;
j++;
}
//输出
for (int a=0; a<k; a++)
{
printf ("%c", chf[a]);
if (chf[a+1]==' ')
break;
}
printf (",");
printf ("%c",chl[0]);
return 0;
}
#define SIZE 20
int main()
{
int i = 0;
char str[] = "Lloyd Fosdick";
for (i=SIZE-1; i>=0; i--) //找到最后一个非字母的字符
{
if (str[i] == ' ' || str[i] == ',' || str[i] == '.')
{
break;
}
}
printf("%s,",&str[i+1]);
printf("%c.",str[0]);
}
结果截图:
/*去除字符串右边空格*/
void StrRTrim(char *pStr)
{
char *pTmp = pStr+strlen(pStr)-1;
while (*pTmp == ' ')
{
*pTmp = '\0';
pTmp--;
}
}
/*去除字符串左边空格*/
void StrLTrim(char *pStr)
{
char *pTmp = pStr;
while (*pTmp == ' ')
{
pTmp++;
}
while(*pTmp != '\0')
{
*pStr = *pTmp;
pStr++;
pTmp++;
}
*pStr = '\0';
}
int StrName(char *pStr, int nLen)
{
int i = 0;
for (i=nLen-1; i>=0; i--) //找到最后一个非字母的字符
{
if (pStr[i] == ' ')
{
break;
}
}
printf("%s,",pStr + i);
printf("%c.", *pStr);
return 0;
}
void main()
{
char str[] = " Lloyd Fosdick ";
StrLTrim(str);
StrRTrim(str);
StrName(str, strlen(str));
}
写了个简单程序,直接复制过去执行,应该是你想要的吧
#include
#include
int main(int argc, char **argv)
{
char s_name[256];
char f_name[2];
char l_name[256];
int i=0;
printf("please enter your name!\n");
fgets(s_name, 256, stdin);
printf("%s\n",s_name);
strncpy(f_name, s_name, 1);
printf("%s\n", f_name);
for (i=1; s_name[i] != '\0'; i++)
{
if (s_name[i] >= 'A' && s_name[i] <= 'Z')
{
break;
}
}
strncpy(l_name, s_name+i, strlen(s_name)-i-1);
printf("%s,%s\n", l_name, f_name);
return 0;
}
按照习惯,姓和名首字母都是大写的字母,其他是小写,strchr空格,区分出姓氏和名字,再根据你的要求重新拼写就可以了
#include <stdio.h>
#include <string.h>
#define N 100
void main()
{
char first1[N],first2[N],last[3*N];
int x1,x2,y,i,j=0;
scanf("%s%s%s",first1,first2,last);
x1=strlen(first1);
x2=strlen(first2);
y=strlen(last);
last[y]=',';
for(i=1;i<=x1;i++)
last[y+i]=first1[j++];
last[y+x1+1]=' ';
for(i=1;i<=x2;i++)
last[y+x1+1+i]=first2[j++];
last[y+x1+x2+2]='\0';
for(i=0;i<=y+x1+x2+2;i++)
printf("%c",last[i]);
printf("\n");
}
http://blog.csdn.net/zhagoodwell/article/details/77888320
这个是不是~你的初衷?