如何用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
相关产品推荐
相关产品推荐

