Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;在用户插入的字符串的每个元音后插入一对字符的代码 在C++中用户输入的字符串中的每个元音之后,请帮助使该代码插入 OB。代码仅在第一个元音之前添加一个doubleob。谢谢 #include <iostream> #include <string> #include <algorithm> int main() { std::string s; std::cin >> s; std::string o ="ob"; for (char& v: s) { if (v == 'a' || v=='e' || v == 'i' || v == 'o' || v == 'u') s = s.insert(s.find(v),o); } std::cout << s << std::endl; } #包括 #包括 #包括 int main() { std::字符串s; 标准:cin>>s; std::string o=“ob”; 用于(字符和v:s) { 如果(v='a'| | v='e'| | v='i'| | v='o'| | v='u') s=s.插入(s.查找(v),o); } 我不打算提及评论中提到的bug_C++_C++11_Visual C++ - Fatal编程技术网 >s; std::string o=“ob”; 用于(字符和v:s) { 如果(v='a'| | v='e'| | v='i'| | v='o'| | v='u') s=s.插入(s.查找(v),o); } 我不打算提及评论中提到的bug,c++,c++11,visual-c++,C++,C++11,Visual C++" /> >s; std::string o=“ob”; 用于(字符和v:s) { 如果(v='a'| | v='e'| | v='i'| | v='o'| | v='u') s=s.插入(s.查找(v),o); } 我不打算提及评论中提到的bug,c++,c++11,visual-c++,C++,C++11,Visual C++" />

C++;在用户插入的字符串的每个元音后插入一对字符的代码 在C++中用户输入的字符串中的每个元音之后,请帮助使该代码插入 OB。代码仅在第一个元音之前添加一个doubleob。谢谢 #include <iostream> #include <string> #include <algorithm> int main() { std::string s; std::cin >> s; std::string o ="ob"; for (char& v: s) { if (v == 'a' || v=='e' || v == 'i' || v == 'o' || v == 'u') s = s.insert(s.find(v),o); } std::cout << s << std::endl; } #包括 #包括 #包括 int main() { std::字符串s; 标准:cin>>s; std::string o=“ob”; 用于(字符和v:s) { 如果(v='a'| | v='e'| | v='i'| | v='o'| | v='u') s=s.插入(s.查找(v),o); } 我不打算提及评论中提到的bug

C++;在用户插入的字符串的每个元音后插入一对字符的代码 在C++中用户输入的字符串中的每个元音之后,请帮助使该代码插入 OB。代码仅在第一个元音之前添加一个doubleob。谢谢 #include <iostream> #include <string> #include <algorithm> int main() { std::string s; std::cin >> s; std::string o ="ob"; for (char& v: s) { if (v == 'a' || v=='e' || v == 'i' || v == 'o' || v == 'u') s = s.insert(s.find(v),o); } std::cout << s << std::endl; } #包括 #包括 #包括 int main() { std::字符串s; 标准:cin>>s; std::string o=“ob”; 用于(字符和v:s) { 如果(v='a'| | v='e'| | v='i'| | v='o'| | v='u') s=s.插入(s.查找(v),o); } 我不打算提及评论中提到的bug,c++,c++11,visual-c++,C++,C++11,Visual C++,我将避免尝试操作正在搜索的同一字符串 尤其是基于范围的for循环,它将使用迭代器。迭代器可能会因更改基础集合而失效,通常与动态内存(重新)分配同时发生。我不知道字符串迭代器是如何工作的,但我猜随着字符串的增长,迭代器也会失效 我将创建第二个字符串,扫描第一个字符串以确定有多少元音,并立即保留那么多的空间。这需要在第一个字符串上迭代两次,但最多只能调用一次堆分配 然后简单地迭代第一个字符串并填充第二个字符串 #include <iostream> #include <string

我将避免尝试操作正在搜索的同一字符串

尤其是基于范围的for循环,它将使用迭代器。迭代器可能会因更改基础集合而失效,通常与动态内存(重新)分配同时发生。我不知道字符串迭代器是如何工作的,但我猜随着字符串的增长,迭代器也会失效

我将创建第二个字符串,扫描第一个字符串以确定有多少元音,并立即保留那么多的空间。这需要在第一个字符串上迭代两次,但最多只能调用一次堆分配

然后简单地迭代第一个字符串并填充第二个字符串

#include <iostream>
#include <string>
#include <algorithm>

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

int main()
{
  const std::string vowel_postfix = "ob";
  std::string in, out;
  std::cin >> in;
  auto vowel_count = std::count_if(in.begin(), in.end(), is_vowel);
  out.reserve(in.length() + vowel_count * 2);
  for (char c : in) {
    out.push_back(c);
    if (is_vowel(c))
      out.insert(out.length(), vowel_postfix);
  }
  std::cout << out << std::endl;
}
#包括
#包括
#包括
布尔是_元音(字符c)
{
返回c='a'| c='e'| c='i'| c='o'| c='u';
}
int main()
{
常量std::字符串元音_postfix=“ob”;
std::输入、输出字符串;
标准::cin>>中;
如果(in.begin(),in.end(),是_元音),则自动元音_count=std::count_;
out.reserve(in.length()+元音计数*2);
for(字符c:in){
向外。向后推(c);
if(是_元音(c))
out.insert(out.length(),元音后缀);
}
std::cout我会做:

bool is_vowel(char cc)
{
    const char c = tolower(cc);
    return
        c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == ä || c == ö;
}
…和所有其他可能带有重音符号的元音。然后:

int main()
{
    std::string s;
    std::cin >> s;

    std::string ss;

    for (const char c: s)
    {
        ss += c;

        if (is_vowel(c))
            ss += "ob";    
    }

    std::cout << ss << std::endl
}
intmain()
{
std::字符串s;
标准:cin>>s;
std::字符串ss;
用于(常量字符c:s)
{
ss+=c;
if(是_元音(c))
ss+=“ob”;
}

std::cout尝试类似的操作。它使用索引而不是迭代器,并让
std::string
为您处理搜索和比较,而不是手动执行:

#include <iostream>
#include <string>

int main()
{
    const std::string vowels = "aAeEiIoOuU";
    const std::string o = "ob";

    std::string s;
    std::cin >> s;

    auto i = s.find_first_of(vowels);
    while (i != std::string::npos)
    {
        s.insert(++i, o);
        i = s.find_first_of(vowels, i + o.size());
    }

    std::cout << s << std::endl;
}
#包括
#包括
int main()
{
常量std::string元音=“aaeeiiouu”;
常数std::string o=“ob”;
std::字符串s;
标准:cin>>s;
自动i=s.find_first_of(元音);
while(i!=std::string::npos)
{
s、 插入(++i,o);
i=s.find_first_of(元音,i+o.size());
}

std::cout一个问题是您使用
s.find(v)
:这将为字符串的每个元音返回相同的位置。相反,您应该使用迭代器进行迭代,然后不需要
s.find(v)
因为您有迭代器。这有意义吗?请注意,使用迭代器还将修复代码中的另一个问题,即您在使用基于范围的for循环对字符串进行迭代时修改字符串(这是未定义的行为,请阅读:)插入“ob”后,需要将开始搜索位置提前“ob”的长度。不需要存储输入字符串。只需使用cin.get获取下一个字符并按原样输出或替换它。您应该将元音放入字符串中,并在元音字符串中搜索该字符;这消除了长
if
语句。现在,当我使用“push\u front”时,它返回一个错误,是因为保留的空间是after吗因为我已经尝试了最新的C++ 11编译器来排除编译器问题。不,STD::vector::Reavy不会阻止重新分配。你的错误是因为STD::vector不定义PuxJoad成员函数。这是STL容器和其他C++的一个很好的资源。