2 whyyouhitme whyyouhitme_ 于 2018.02.04 19:25 提问

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

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

10个回答

qq_37597439
qq_37597439   2018.02.04 21:59

哎呀,贴代码给你吧

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;

}


qq_37597439
qq_37597439 花式绝望。。。开头是# include <stdio.h> # include <malloc.h>
18 天之前 回复
GHH120338
GHH120338   2018.02.04 20:16

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

u011029018
u011029018 如果是c语言,那就遍历字符串找到空格的位置,然后进行字符串的切片操作,如果是c++,直接有函数split进行操作。 在分割好后,先输出后面的字符串,再输出“,”,最后再输出字符串的第一个字母。
18 天之前 回复
whyyouhitme_
whyyouhitme_ 回复GHH120338: 老哥,请注意题目。说是有可能会加空格。也就是,也有可能不加空格。所以我是按大写字母区分的。
18 天之前 回复
Vincent_Xupt
Vincent_Xupt   2018.02.04 20:21

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

u011029018
u011029018 如果是c语言,那就遍历字符串找到空格的位置,然后进行字符串的切片操作,如果是c++,直接有函数split进行操作。 在分割好后,先输出后面的字符串,再输出“,”,最后再输出字符串的第一个字母。
18 天之前 回复
Vincent_Xupt
Vincent_Xupt 回复whyyouhitme_: 然后,你又不会告诉我,“老哥,如果用户没输入逗号呢?”如果是这样,违背题目,无法自动识别名字与姓氏,一道没意思的题喽。哈哈
18 天之前 回复
Vincent_Xupt
Vincent_Xupt 回复whyyouhitme_: 如果没有空格。那就IF...ELSE...判断,要不遇到空格就输出,str[0],要不遇到逗号就输出str[0]
18 天之前 回复
whyyouhitme_
whyyouhitme_ 回复Siege-lion: 老哥。如果用户的输入里没有空格呢?
18 天之前 回复
qq_37597439
qq_37597439   2018.02.04 20:48
  我的想法是:按老外的习惯,他们的首字母会大写,弄俩字符串,分别记录名和姓,遇到大写,就是65到106开始,把名输到名的字符串里面,遇到第二个大写输到姓的字符串里面,然后输出。
GHH120338
GHH120338   2018.02.04 20:54

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

qq_38646470
qq_38646470   2018.02.04 22:04
#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]);
}


结果截图:

图片说明

lizhongyu
lizhongyu   2018.02.05 10:31

/*去除字符串右边空格*/

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));
}

vist_1
vist_1   2018.02.05 11:09

写了个简单程序,直接复制过去执行,应该是你想要的吧
#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;

}


vist_1
vist_1 复制的有问题,前两行是#include <stdio.h>和#include <string.h>
17 天之前 回复
zxh_85
zxh_85   2018.02.05 11:45

按照习惯,姓和名首字母都是大写的字母,其他是小写,strchr空格,区分出姓氏和名字,再根据你的要求重新拼写就可以了

zhagoodwell
zhagoodwell   2018.02.06 08:48
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!