
该方法旨在用字母表中最接近的元音(也称为小写拉丁字母)替换一串辅音。如果两个元音同样接近,我们可以用这些字母中的第一个元音来替换它们。
让我们来看一些输入场景 –
假设我们有一个字符串,比如“ebgkjasjd”,现在我们需要将字符串中所有出现的辅音字母替换为最近的元音字母。
Input = "ebgkjasjd";Result =ebgkjasjdeaeiiauie
将元素’b’替换为’a’,因为它是最近的元音字母。我们可以用’e’或’i’替换元素’g’,因为它们都是同样最近的,但我们选择用’e’替换它,因为它先出现。对于字符串中的所有其他元素也是类似的。
立即学习“C++免费学习笔记(深入)”;
假设如果输入字符串不存在任何元音,例如,考虑一个字符串:“sdfhgtykl”,则得到的结果输出为 –
Input = "sdfhgtykl";Result =sdfhgtyklueeieuuii
对于第一个元素’s’,元音’u’是最接近的,因此将’s’替换为’u’。与数组中的所有其他元素一样,它们都是辅音。这种情况也产生了该方法的最坏情况复杂度。
算法
从起始索引开始遍历输入字符串。
如果遇到一个辅音,将计算从该辅音到左右最近的两个元音之间的字母数量。选择具有较少字母的元音。
该过程将重复进行,直到遍历完字符串中的所有辅音字母。
获得的输出是替换后的字符串。
示例
以下是用C++实现的代码,将字符串中的所有辅音字母替换为字母表中最近的元音字母 –
#include using namespace std;void solve(string& s) { for(char &ch : s) { if(ch>'a' && ch<'e') { if(ch-'a' 'e' && ch<'i') { if(ch-'e' 'i' && ch<'o') { if(ch-'i' 'o' && ch<'u') { if(ch-'o' 'u') { ch = 'u'; } }}int main() { string s = "ibgshzjbsh"; cout << s << "n"; solve(s); cout << s; return 0;}
输出
“ibgshzjbsh”“iaeuiuiaui”
示例
但是,更好的方法是使用数组并存储每个字符最接近的字符答案,而不是使用大量 if-else 条件。
#include #include using namespace std;string solve(string s) { string hash = "aaaeeeeiiiiioooooouuuuuuuu"; for (int i=0;i<s.size();i++) { s[i] = hash[s[i]-'a']; } return s;}int main() { string s = "ibgshzjbsh"; cout << solve(s); return 0;}
输出
iaeuiuiaui
结论
我们可以通过查找元素并将其替换为最接近的字符来替换元素。遍历一次字符串的时间复杂度为 O(n)。第二种方法更容易理解和编写代码,并且不那么麻烦。时间复杂度也是 O(n),因为我们只遍历字符串一次。
以上就是使用C++程序将字符串中的所有辅音替换为最近的元音的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444914.html
微信扫一扫
支付宝扫一扫