You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用scanf直接拆分符合规则的连写姓名字符串为两个独立串

直接拆分含两个大写字母的连写姓名字符串

针对你的需求,不需要用strcat拼接,最直接的方式是定位第二个大写字母的位置,然后直接截取前后两部分,以下是具体实现:

核心思路

  1. 遍历字符串,找到第二个大写字母的索引(首字符已是第一个大写,从索引1开始查找)
  2. 以该索引为分界点,分别将前后两段字符复制到两个结果数组中
  3. 利用snprintf控制复制长度,避免缓冲区溢出

代码示例

#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main() {
    char full_name[21] = "WillisBruce"; // 最长20字符,数组设为21留终止符位置
    char first_name[21] = {0};
    char last_name[21] = {0};
    int split_index = -1;

    // 遍历查找第二个大写字母的位置
    for (int i = 1; i < strlen(full_name); i++) {
        if (isupper((unsigned char)full_name[i])) {
            split_index = i;
            break;
        }
    }

    // 确认找到拆分点后执行截取
    if (split_index != -1) {
        // 复制名字前缀:从开头到拆分点前一位
        snprintf(first_name, split_index + 1, "%s", full_name);
        // 复制名字后缀:从拆分点到末尾
        snprintf(last_name, sizeof(last_name), "%s", full_name + split_index);

        printf("First Name: %s\nLast Name: %s\n", first_name, last_name);
    }

    return 0;
}

优势说明

  • 完全避免拼接操作,直接通过索引定位拆分,逻辑清晰高效
  • 用snprintf替代strcpy,自动处理字符串终止符,同时限制复制长度,防止缓冲区溢出
  • 适配所有符合规则的输入(首字符大写、两个大写不连续且非末尾)

内容的提问来源于stack exchange,提问作者ATpaul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:35:04