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

如何向定长char数组添加字符?C++元音插入b函数实现求助

问题解答:向固定大小char数组添加字符与B语言转换函数实现

问题一:如何向已固定大小char数组中添加字符?

首先得明确:固定大小的char数组是有容量限制的,添加字符前必须确保数组还有剩余空间(也就是当前字符串的长度 + 要添加的字符数 < 数组总大小,因为最后要留一个位置放字符串结束符\0)。具体步骤可以这么做:

  • 第一步:找到字符串末尾:用循环遍历数组,直到找到\0(字符串结束标记),或者直接用strlen()函数获取当前字符串长度(注意strlen()返回的是不含\0的长度)。
  • 第二步:检查剩余空间:如果当前长度 + 要添加的字符数 >= 数组总大小,直接添加会导致数组溢出,这时候要么换用动态分配的内存(比如new char[]或者std::vector<char>),要么只能截断要添加的内容。
  • 第三步:添加字符并补结束符:如果空间足够,把要添加的字符依次放到\0的位置,最后记得补上\0,不然字符串会出现乱码。

举个简单例子:

char arr[10] = "abc"; // 当前长度3,数组总大小10,剩余空间6(包括\0)
int len = strlen(arr);
// 添加字符'd'
if (len + 1 < 10) {
    arr[len] = 'd';
    arr[len + 1] = '\0';
}
// 现在arr变成"abcd"

问题二:实现B语言转换函数(元音后添加'b')

你的代码已经完成了统计字符串长度和遍历检查元音的第一步,接下来的核心是处理字符的插入——直接在原数组里插入会需要移动后面的所有字符,不仅麻烦还容易溢出,所以更稳妥的方式是创建一个新的数组来存储转换后的结果。我帮你修改并优化了代码,注释里写了详细逻辑:

#include <iostream>
#include <cctype> // 用于tolower(),处理大小写元音

void bLanguage(char inputString[]) {
    // 第一步:统计原字符串长度和元音数量
    int originalLen = 0;
    int vowelCount = 0;
    while (inputString[originalLen] != '\0') {
        char lowerChar = tolower(inputString[originalLen]);
        // 检查是否是元音(支持大小写)
        if (lowerChar == 'a' || lowerChar == 'e' || lowerChar == 'i' || lowerChar == 'o' || lowerChar == 'u') {
            vowelCount++;
        }
        originalLen++;
    }

    // 计算转换后字符串的总长度(原长度+元音数,再加1存结束符)
    int newStrLen = originalLen + vowelCount;
    // 动态分配内存存储结果,避免固定数组的容量限制
    char* result = new char[newStrLen + 1];
    int resultIdx = 0;

    // 第二步:遍历原字符串,构建转换后的结果
    for (int j = 0; j < originalLen; j++) {
        char currentChar = inputString[j];
        // 先把当前字符复制到结果数组
        result[resultIdx++] = currentChar;
        // 如果是元音,额外添加一个'b'
        char lowerCurrent = tolower(currentChar);
        if (lowerCurrent == 'a' || lowerCurrent == 'e' || lowerCurrent == 'i' || lowerCurrent == 'o' || lowerCurrent == 'u') {
            result[resultIdx++] = 'b';
        }
    }
    // 别忘了添加字符串结束符
    result[resultIdx] = '\0';

    // 输出转换后的字符串
    std::cout << result << std::endl;
    // 释放动态分配的内存,避免内存泄漏
    delete[] result;
}

额外优化建议:用std::string更省心

如果可以的话,换成C++的std::string会更简单,不用手动管理内存,代码也更简洁:

#include <iostream>
#include <string>
#include <cctype>

void bLanguage(const std::string& input) {
    std::string result;
    for (char c : input) {
        result += c;
        char lowerC = tolower(c);
        if (lowerC == 'a' || lowerC == 'e' || lowerC == 'i' || lowerC == 'o' || lowerC == 'u') {
            result += 'b';
        }
    }
    std::cout << result << std::endl;
}

这样调用的时候直接传字符串就行,比如bLanguage("pig")会输出pibig,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:47:07