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

字符串重音字符存储及去重音程序问题排查

修复重音字符去除函数的问题

嘿,我一眼就看到你代码里的问题啦!咱们来快速解决它:

问题根源

你的func函数里,当匹配到带重音的字符时,错误地把返回值ret赋值成了acc[i](也就是原来的带重音字符),而不是对应的无重音字符norm[i]!这就导致输入é的时候,函数相当于原封不动返回了它,自然看不到替换效果。

修正后的函数代码

把赋值语句改成ret = norm[i]就可以了,还可以加个break提升效率:

char func(char c) {
    string acc = "èé";
    string norm = "ee";
    char ret = c; // 默认返回原字符
    for(int i = 0; i < acc.size(); i++) {
        if(c == acc[i]) {
            ret = norm[i]; // 这里改成对应无重音字符!
            break; // 找到匹配后直接跳出循环,不用继续遍历
        }
    }
    return ret;
}

完整的主函数示例

为了让你能直接测试,这里附上包含循环调用的完整代码,它会逐个处理输入字符串的每个字符:

#include <iostream>
#include <string>
using namespace std;

char func(char c) {
    string acc = "èéàìòù"; // 可以扩展更多重音字符
    string norm = "eaiou"; // 对应无重音字符,要和acc长度严格一致
    char ret = c;
    for(int i = 0; i < acc.size(); i++) {
        if(c == acc[i]) {
            ret = norm[i];
            break;
        }
    }
    return ret;
}

int main() {
    string input;
    cout << "请输入带重音的字符串:";
    getline(cin, input);
    
    string output;
    // 循环处理每个字符
    for(char c : input) {
        output += func(c);
    }
    
    cout << "去除重音后的结果:" << output << endl;
    return 0;
}

额外提示

  • 一定要保证acc和norm两个字符串的长度完全一致,不然会出现索引越界或者匹配错位的问题。
  • 如果需要支持更多重音字符(比如ù、ç等),直接在两个字符串末尾添加对应的字符对即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:10:16