将 NameSurname 扫描成两个单独的字符串

问题描述 投票:0回答:1

我有一个要读取的字符串,即

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”。

根据规则,它可能不是“麦当劳”。

我不必检查规则,我可以理所当然地拥有它们。

我的示例完成了我想要的工作,但我想知道是否可以避免任何类型的重新组装。

c string scanf
1个回答
0
投票

评论转移到答案中

使用怎么样:

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”这样的名字的问题。然而,这种迂回的问题可能超出了练习的范围。

© www.soinside.com 2019 - 2024. All rights reserved.