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

如何用C语言交替合并两个字符串并转为大写?

字符串交替合并实现方案

首先明确你的需求:将两个字符串s和t交替取字符合并(比如s="ABC"、t="qwerty"时,合并后是AqBwCerty),还支持将结果全部转为大写。

你当前代码的问题

你的现有代码存在几个关键问题:

  • 结果数组w未初始化也未填充内容,直接printf会输出内存中的垃圾值
  • t[50] + s[50]是完全错误的写法:数组下标50已经超出了你定义的char t[50]的范围(合法下标是0-49),而且这只是两个单个字符的数值相加,根本不是字符串合并的逻辑
  • 完全没有实现交替取字符、处理长度差异的核心逻辑

完整实现代码

这里给你写好可以直接运行的代码,包含普通合并和转大写合并的功能:

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

// 合并字符串的函数,toUpper为1时转大写,0时保持原大小写
void mergeStrings(char *result, const char *s, const char *t, int toUpper) {
    int i = 0, j = 0, k = 0;
    int lenS = strlen(s);
    int lenT = strlen(t);
    
    // 交替取两个字符串的字符,直到其中一个遍历完
    while (i < lenS && j < lenT) {
        char currentChar = s[i++];
        result[k++] = toUpper ? toupper(currentChar) : currentChar;
        
        currentChar = t[j++];
        result[k++] = toUpper ? toupper(currentChar) : currentChar;
    }
    
    // 处理s中剩余的字符
    while (i < lenS) {
        char currentChar = s[i++];
        result[k++] = toUpper ? toupper(currentChar) : currentChar;
    }
    
    // 处理t中剩余的字符
    while (j < lenT) {
        char currentChar = t[j++];
        result[k++] = toUpper ? toupper(currentChar) : currentChar;
    }
    
    // 必须添加字符串结束符,否则不是合法的C字符串
    result[k] = '\0';
}

int main() {
    char s[50] = "abcderf";
    char t[50] = "ARTYY";
    // 结果数组要足够大,至少是两个输入字符串长度之和+1(给结束符留位置)
    char w[100];
    
    // 普通合并输出
    mergeStrings(w, s, t, 0);
    printf("普通合并结果: %s\n", w);
    
    // 转大写合并输出
    mergeStrings(w, s, t, 1);
    printf("转大写合并结果: %s\n", w);
    
    return 0;
}

代码关键点说明

  • 用三个索引分别管理s的遍历(i)、t的遍历(j)、结果数组的填充(k)
  • 先交替取字符,直到其中一个字符串被遍历完,再把剩余的字符直接追加到结果里
  • toupper()函数来自<ctype.h>头文件,用来把字符转为大写,注意要包含这个头文件
  • 结果数组的大小一定要足够,这里定义100是因为两个输入数组最大都是50,总和加结束符完全够用
  • 最后一定要给结果数组加上'\0',否则C语言无法识别为合法的字符串

运行结果示例

对于你的输入s="abcderf"、t="ARTYY":

  • 普通合并结果:aAbRcTdYeRfY
  • 转大写合并结果:AABRCTDYERFY

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:20:15