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

如何实现字符串辅音间元音复制并解决C++ insert编译报错问题

错误原因分析

  1. insert函数参数不匹配:你调用的i.insert(j+1, i[j])中,第二个参数是char类型,但C++ std::string的insert重载没有直接接收【位置+单个字符】的版本,正确的插入单个字符的重载需要传入三个参数:插入位置、插入数量、待插入字符,所以编译器找不到匹配的重载,触发报错。
  2. 边界判断的隐性问题:你用vo.find(xxx) >= i.length()判断是否为辅音,虽然运行时大概率没问题,但不符合规范:string::find查找失败时返回的是固定值string::npos,和当前字符串长度没有关联,极端场景下会出现逻辑错误。
  3. 循环长度固定问题:你初始化n = i.size()之后,循环条件用固定的n做判断,但插入字符会让字符串长度变长,虽然当前需求场景下不会触发逻辑错误,但属于代码隐患。

修复方案

快速修复现有代码

只需要调整insert的参数,同时优化判断逻辑即可:

#include<bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

using namespace std;

void solution(){
   string i;
   cin >> i;
   string vo = "aeuio";
   // 循环条件动态取当前字符串长度,避免插入后越界
   for(int j=1; j < (int)i.size() -1; j++){
       // 用string::npos判断查找失败,逻辑更严谨
       if(vo.find(i[j-1]) == string::npos && vo.find(i[j]) != string::npos && vo.find(i[j+1]) == string::npos){
           // 调整insert参数,中间加1表示插入1个对应字符
           i.insert(j+1, 1, i[j]);
           // 插入后多了一个字符,j跳过刚插入的元音,避免重复判断
           j++;
       }
   }
   cout << i << endl;
}
int main(){
  ios
  int t;
  cin >> t;
  while(t--){
      solution();
  }
  return 0;
}

更稳妥的实现方案(避免操作原字符串索引)

直接遍历原字符串构建新结果,不需要处理插入带来的索引变化问题,逻辑更清晰:

#include<bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

using namespace std;

bool is_vowel(char c) {
    return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}

void solution(){
   string s;
   cin >> s;
   string res;
   int n = s.size();
   for(int j=0; j < n; j++){
       res += s[j];
       // 只有不是首尾字符,且当前是元音、左右都是辅音的情况下,多追加一次当前字符
       if(j > 0 && j < n-1 && is_vowel(s[j]) && !is_vowel(s[j-1]) && !is_vowel(s[j+1])) {
           res += s[j];
       }
   }
   cout << res << endl;
}
int main(){
  ios
  int t;
  cin >> t;
  while(t--){
      solution();
  }
  return 0;
}

两个版本都可以正确实现需求:输入informatics输出infoormaatiics。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:36:04