首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C分隔多个名字和/或姓氏

用C分隔多个名字和/或姓氏
EN

Stack Overflow用户
提问于 2018-11-29 13:30:56
回答 5查看 1.5K关注 0票数 8

因此,我在做一个小项目,而我想要获取模拟数据,并将它们分离成结构。但我在想有多个名字和/或姓的人的问题。

我想像你那样写名字(比如"Michael")和所有大写字母的姓氏(比如"JAMESON")。

但是,如果我读到一个像,Michael,Daniel,VAN,DOORNE,,等等的名字,我不知道我怎么能把"Michael Daniel“作为名字,把"VAN DOORNE”作为姓。我试着用第一个大写字母来分开,但我当然也把第一个字母大写在别人的名字里。

示例:

我想读Michael Daniel VAN DOORNE,把它分成"Michael Daniel“作为名字,"VAN DOORNE”作为姓氏。

代码语言:javascript
复制
sscanf(buffer, "%s %s", firstName, lastName);

那是不正常的。但我还是想出了一个解决方案,用多个名字和姓氏来模拟名字。

EN

回答 5

Stack Overflow用户

发布于 2018-11-29 14:22:51

由于您似乎完全控制了数据,所以我建议采用另一种方法:

在名字和姓氏之间的一个特殊分隔符。然后,您不再依赖大小写敏感,特别是出现在另一个答案中的单个字符名称问题不再是一个问题了。

分隔符字符应该是不会出现在任何名称中的字符,如制表符(与空格相反)、#、“\”、.即使是逗号或分号也应该很好,尽管句点可能出现在缩写的名称中,因此不应该使用。

票数 6
EN

Stack Overflow用户

发布于 2018-11-29 14:15:27

因此,知道它是名字或姓氏的一部分有点困难,但是从它的声音来看,你可以控制数据,所以你可以用小写的名字和大写的最后一个名字,或者使用其他的方法。

拆分字符串,这相对容易使用strtok

假设您正在逐行读取名称,并将它们填充到buffer中。

使用strtokbuffer分解为“名称”。

代码语言:javascript
复制
char *token
token = strtok(buffer, " "); //note the second parameter is what you want to parse the array by
while(token != NULL)
{
    if(isupper(token[0]))
        //store that token into your struct (first or last name) allow for multiple
    else
        //store into the other 

    token = strtok(NULL, " "); //keep looping on string for names
}
票数 1
EN

Stack Overflow用户

发布于 2018-11-29 14:15:00

假设姓总是用大写写的,那么从末尾开始读取字符串,看看什么时候有最后一个小写。

代码语言:javascript
复制
int i=strlen(buffer)-1;
while(!islower(buffer[i]) && i>0)
    i--;
strncpy(firstName,buffer,i+1);
strcpy(lastName,&buffer[i+2]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53540199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档