我有一个要读取的字符串,即
AaaaBbbb
,我希望将其分配为两个单独的字符串,即 Aaaa
和 Bbbb
。
事实上,我必须读取一个姓氏,不带空格,并将其放在两个单独的字符串中。
我的目标是将姓氏分开以进一步处理。 我不必检查意外情况,也无需检查其他任何内容,只需检查姓氏列表。
我无法以“简单”的方式做到这一点。
我最好的尝试是
char str1[20], str2[20], str3[20];
fscanf(hl_inp, "%1c%[^A-Z]%s", str1, str2, str3);
但我想避免任何重新组装过程,这里有
str1
和 str2
。
有什么想法可以直接这样做,或者比我的尝试更好吗?
编辑:完成重新编写,让我们最后一次尝试。
我有一根绳子。它都是小写字符,有两个且只有两个大写字符。该字符串最多可以有 20 个字符。
两个大写字符遵循以下规则:
这是最好的尝试:
char name[] = "WillisBruce";
char str1[20], str2[20], str3[20];
sscanf(name, "%1s%[^A-Z]%s", str1, str2, str3);
strcat(str1, str2);
printf("Name: %s, Surname: %s", str3, str1);
示例中的字符串为“WillisBruce”。 但它可能是“CareyMariah”、“JonhElton”以及“ObamaBarak”。
根据规则,它可能不是“麦当劳”。
我不必检查规则,我可以理所当然地拥有它们。
我的示例完成了我想要的工作,但我想知道是否可以避免任何类型的重新组装。
将评论转移到答案中
使用怎么样:
fscanf(hl_inp, "%1c%[^A-Z]%s", &str1[0], &str1[1], str3);
这使用您的第一个格式字符串。它将单个字符放入
str1[0]
中,并将名字的其余部分放入 str1[1]
中,因此无需重新组装。
您也应该防止缓冲区溢出:
fscanf(hl_inp, "%1c%18[^A-Z]%s", &str1[0], &str1[1], str3);
您会遇到像“McDonaldIain”这样的名字的问题。然而,这种迂回的问题可能超出了练习的范围。