在C中分隔多个名字和/或姓氏

Emi*_*sen 8 c

所以我正在开发一个小项目,而我想获取模拟数据并将它们分成结构.但我正在考虑具有多个名字和/或姓氏的人的问题.

我想写你喜欢的名字(比如" Michael ")和所有大写字母的姓氏(比如" JAMESON ").

但是,如果我正在读一个名叫Michael Daniel VAN DOORNE的名字等等,我不知道我怎么能把 " Michael Daniel "作为名字和" VAN DOORNE "作为姓氏.我试图通过停在第一个大写字母来分开,但我当然也将某人的名字中的第一个字母大写.

例:

我想读Michael Daniel VAN DOORNE,并将其分为" Michael Daniel "作为名字,将" VAN DOORNE "作为姓氏.

sscanf(buffer, "%s %s", firstName, lastName);
Run Code Online (Sandbox Code Playgroud)

那不会自然地起作用.但我仍然坚持想出一个具有多个名字和姓氏的模拟名称的解决方案.

Aco*_*gua 6

由于您似乎完全控制了数据,我建议采用不同的方法:

forename(s)和surname(s)之间的特定分隔符.那么你不再依赖于区分大小写,特别是在另一个答案中出现的单个字符名称问题不再是问题.

分隔符应该是一个不会出现在任何名称中的字符,例如制表符(与空格相对)字符#,'|',...即使逗号或分号也应该没问题,尽管句号可能会缩写名称,因此不应使用.

  • 我建议使用为此目的设计的[标准ASCII字符]之一(https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text),例如[unit separator](https://en.wikipedia.org/wiki/C0_and_C1_control_codes#Field_separators)`0x1F`. (2认同)

小智 0

假设姓氏始终以大写字母书写,请从末尾开始读取字符串,看看最后一个小写字母是什么时候。

int i=strlen(buffer)-1;
while(!islower(buffer[i]) && i>0)
    i--;
strncpy(firstName,buffer,i+1);
strcpy(lastName,&buffer[i+2]);
Run Code Online (Sandbox Code Playgroud)