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

如何移除字符串中各字符的奇数次出现实例?

解决字符串移除字符奇数次出现的问题

你现在的问题是搞混了字符串的奇数位置和字符的奇数次出现——原代码只是删掉了字符串中索引为0、2、4的字符(因为erase会改变字符串长度,循环逻辑实际是跳过了奇数索引的字符),所以得到了"BBA",但我们需要针对每个字符单独统计出现次数,只保留它的偶数次出现实例。

正确实现思路

因为字符串只包含A、B、C、D四个字符,用一个小型计数器数组就能轻松跟踪每个字符的出现次数:

  • 初始化长度为4的数组,分别对应A、B、C、D的出现次数,初始值全为0
  • 遍历原字符串的每个字符:
    1. 找到当前字符对应的计数器索引,把计数加1
    2. 如果计数是偶数,说明这是该字符的偶数次出现,把它加到结果字符串里
  • 最后输出结果就行

完整代码

#include <iostream>
#include <string>

using namespace std;

int main() {
    string input = "ABBBCA";
    string result;
    // 索引0=A,1=B,2=C,3=D,记录每个字符的出现次数
    int count[4] = {0};

    for (char c : input) {
        int idx;
        // 匹配字符对应的计数器索引
        switch(c) {
            case 'A': idx = 0; break;
            case 'B': idx = 1; break;
            case 'C': idx = 2; break;
            case 'D': idx = 3; break;
            default: idx = -1; // 题目限定只有ABCD,这里可以忽略
        }
        count[idx]++;
        // 只保留偶数次出现的字符
        if (count[idx] % 2 == 0) {
            result += c;
        }
    }

    cout << "处理后的字符串:" << result << endl; // 输出 BA
    return 0;
}

代码解释

  • 用switch把每个字符映射到对应的计数器位置,保证每个字符的计数互不干扰
  • 测试输入"ABBBCA"时的具体处理:
    • A:第1次出现(计数1,奇数,移除)、第6次出现(计数2,偶数,保留)
    • B:第1次(计数1,移除)、第2次(计数2,保留)、第3次(计数3,移除)
    • C:第1次(计数1,移除)
      最终结果就是"BA",完全符合你的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:45:37