c语言编写一个程序,根据用户输入英文名和姓先显示姓氏,其后跟一个逗号,然后显示名的首字母

c语言编写一个程序,根据用户输入英文名和姓先显示姓氏,其后跟一个逗号,然后显示名的首字母。
例如:Lloyd Fosdick
输出是: Fosdick,L.
注意:用户可能在名字前,名字和姓之间,名字后加空格,但输出结果不要空格!

  我的想法是:按老外的习惯,他们的首字母会大写,弄俩字符串,分别记录名和姓,遇到大写,就是65到106开始,把名输到名的字符串里面,遇到第二个大写输到姓的字符串里面,然后输出。

可以根据输入名和姓中间的空格进行划分,至于划分的方法,如果是c语言,那就遍历字符串找到空格的位置,然后进行字符串的切片操作,如果是c++,直接有函数split进行操作。
在分割好后,先输出后面的字符串,再输出“,”,最后再输出字符串的第一个字母。
以上方法可行,老兄可以试试!!!

最简单的方法:设置一个str[MAX_SIZE]的一维数组(MAX_size看自己心情设置大小),然后for循环(也可以其他类型循环),一维数组的最后一个addr输出,判断空格,遇到空格后输出,str[0] 就完了。
如果想稍加完善,记得判断用户输入的姓和名的首字母是否大写,然后进行相应的转换。

可以先提交代码呀,看看是否是wrong answer,万一题目没有你想的那么复杂哩

哎呀,贴代码给你吧

include

include

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
这个是不是~你的初衷?