我正在尝试从用户那里获取全名并显示他的姓名缩写,类似这样:
“Edward Cantrell Cavender Davis” --> Name the user entered
"DAVIS, E. C. C.” -- Name abbreaviated
问题是我不知道该怎么做,我是 C 语言的新手,我在想是否有一些库可以做到这一点。
用户可以输入的最大名称是200
,我需要通过一个函数来检查这个并显示缩写的名称。
我的代码:(我卡在这里了)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void name_abbreviated (char name[200]) {
}
int main() {
char name[200];
printf("Type a full name : ");
gets(name);
name_abbreviated(name);
}
I am thinking if there some library that does this
不,没有。您必须编写自己的代码才能实现此目的。
我可以使用的算法如下:
- 找到最后一个空格(标记其索引)并提取姓氏。
- 遍历
name
,直到空白(你有索引
已经)。每次遇到空格,存储首字母
单词放入缓冲区。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 200
void name_abbreviated (char name[]) {
//printf("|%s|\n", name);
char last_name[20];
int j = 0, last_space_idx;
for(int i = strlen(name) - 1; i >= 0; --i)
{
if(name[i] == ' ')
{
last_space_idx = i;
while(name[i])
last_name[j++] = name[++i];
last_name[j] = '\0';
break;
}
}
//printf("|%s|\n", last_name);
char rest_name[15];
rest_name[0] = name[0];
rest_name[1] = '.';
rest_name[2] = ' ';
j = 3;
for(int i = 3; i < last_space_idx; ++i)
{
if(name[i] == ' ')
{
rest_name[j++] = name[i + 1];
rest_name[j++] = '.';
rest_name[j++] = ' ';
}
}
rest_name[j - 1] = '\0';
//printf("|%s|\n", rest_name);
printf("%s, %s\n", last_name, rest_name);
}
int main() {
char name[LEN];
printf("Type a full name : ");
fgets(name, LEN, stdin);
printf("\n");
name_abbreviated(name);
return 0;
}
输出:
Type a full name :
Davis, E. C. C.
或者,如果您愿意,请参阅 Live demo .