c++ - 在c ++中使用递归从字符串中删除所有辅音
问题描述
我对编程几乎完全陌生,我尝试学习 C++。这是第一个让我觉得自己碰壁的任务。我试图搜索,但因为人们通常使用循环来解决问题,所以我找不到任何东西。
我试图找到一个递归解决方案来删除字符串中的所有辅音(我想我知道如何使用循环来解决它,但想扩展我对递归的了解)。
#include <iostream>
#include <string>
using namespace std;
int i = 0;
string s("");
string del_cons(string z){
if(i == (z.length()-1) ){
s+= z.substr(i);
return s;
}
else if(z[i] == 'a' || z[i] == 'e' || z[i] == 'i' || z[i] == 'o' || z[i] == 'u'){
i++;
s+= del_cons(z.substr(i));
return s;
}
else{
s+= z.substr(i,1);
i++;
s+= del_cons(z.substr(i));
return s;
}
}
int main(){
string x;
getline(cin, x);
cout << del_cons(x) << endl;
return 0;
}
代码可以编译,但是在使用字符串尝试时,我收到以下错误消息:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is 3) > this->size() (which is 2)
Abgebrochen (Speicherabzug geschrieben)
在玩弄代码时,这一行似乎是问题所在:
s+= del_cons(z.substr(i));
有人可以给我一个提示我做错了什么吗?看来我在滥用 substr() 函数,但我不知道怎么做。非常感谢。
解决方案
抱歉,我无法抗拒……如果充分利用 C++ 的潜力,它就是一门美丽而强大的语言……
#include <string>
#include <iostream>
#include <algorithm>
int main()
{
std::string s;
std::getline( std::cin, s );
s.erase(
std::remove_if(
s.begin(),
s.end(),
[](unsigned char x){
return std::string( "aeiouAEIOU" ).find( x ) == std::string::npos;
}
),
s.end()
);
std::cout << s << std::endl;
}
推荐阅读
- sas - SAS 中的 IF THEN 语句
- gnuplot - 使用 gnuplot 中的文本列作为绘图的参数
- javascript - 无法从 fetch 中获取数据
- python - 无法使用 Scrapy 抓取德国网站
- ios - Mac Catalyst 滑动删除在 Mac 上不起作用
- android - Android - 向 MutableLiveData 添加新项目并观察
- ansible - 如何使用 ansible 模块 ios_l2_interfaces 循环遍历 ios 事实?
- php - 如何为不同的mysql查询从写在同一个文件中的多个函数中获取数据?
- html - 一个标签用于多个输入(无线电)
- typescript - GraphQL Apollo Server,如何使字段将空字符串注册为空