字符串重音字符存储及去重音程序问题排查
修复重音字符去除函数的问题
嘿,我一眼就看到你代码里的问题啦!咱们来快速解决它:
问题根源
你的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
相关产品推荐
相关产品推荐

