所以我正在开发一个小项目,而我想获取模拟数据并将它们分成结构.但我正在考虑具有多个名字和/或姓氏的人的问题.
我想写你喜欢的名字(比如" 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)
那不会自然地起作用.但我仍然坚持想出一个具有多个名字和姓氏的模拟名称的解决方案.
由于您似乎完全控制了数据,我建议采用不同的方法:
forename(s)和surname(s)之间的特定分隔符.那么你不再依赖于区分大小写,特别是在另一个答案中出现的单个字符名称问题不再是问题.
分隔符应该是一个不会出现在任何名称中的字符,例如制表符(与空格相对)字符#,'|',...即使逗号或分号也应该没问题,尽管句号可能会缩写名称,因此不应使用.
小智 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)
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |