首页 > 后端开发 > C++ > 正文

使用C++程序将字符串中的所有辅音替换为最近的元音

WBOY
发布: 2023-09-11 10:17:02
转载
921 人浏览过

使用C++程序将字符串中的所有辅音替换为最近的元音

该方法旨在用字母表中最接近的元音(也称为小写拉丁字母)替换一串辅音。如果两个元音同样接近,我们可以用这些字母中的第一个元音来替换它们。

让我们来看一些输入场景 -

假设我们有一个字符串,比如“ebgkjasjd”,现在我们需要将字符串中所有出现的辅音字母替换为最近的元音字母。

Input = "ebgkjasjd";
Result =
ebgkjasjd
eaeiiauie
登录后复制

将元素'b'替换为'a',因为它是最近的元音字母。我们可以用'e'或'i'替换元素'g',因为它们都是同样最近的,但我们选择用'e'替换它,因为它先出现。对于字符串中的所有其他元素也是类似的。

假设如果输入字符串不存在任何元音,例如,考虑一个字符串:“sdfhgtykl”,则得到的结果输出为 -

Input = "sdfhgtykl";
Result =
sdfhgtykl
ueeieuuii
登录后复制

对于第一个元素's',元音'u'是最接近的,因此将's'替换为'u'。与数组中的所有其他元素一样,它们都是辅音。这种情况也产生了该方法的最坏情况复杂度。

算法

  • 从起始索引开始遍历输入字符串。

  • 如果遇到一个辅音,将计算从该辅音到左右最近的两个元音之间的字母数量。选择具有较少字母的元音。

  • 该过程将重复进行,直到遍历完字符串中的所有辅音字母。

  • 获得的输出是替换后的字符串。

示例

以下是用C++实现的代码,将字符串中的所有辅音字母替换为字母表中最近的元音字母 -

#include <iostream>
using namespace std;
void solve(string& s) {
   for(char &ch : s) {
      if(ch>'a' && ch<'e') {
         if(ch-'a' <= 'e'-ch) ch='a';
         else ch='e';
      } else if(ch>'e' && ch<'i') {
         if(ch-'e' <= 'i'-ch) ch='e';
         else ch='i';
      } else if(ch>'i' && ch<'o') {
         if(ch-'i' <= 'o'-ch) ch='i';
         else ch='o';
      } else if(ch>'o' && ch<'u') {
         if(ch-'o' <= 'u'-ch) ch='o';
         else ch='u';
      } else if(ch>'u') {
         ch = 'u';
      }
   }
}
int main() {
   string s = "ibgshzjbsh";
   cout << s << "\n";
   solve(s);
   cout << s;
   return 0;
}
登录后复制

输出

“ibgshzjbsh”
“iaeuiuiaui”
登录后复制

示例

但是,更好的方法是使用数组并存储每个字符最接近的字符答案,而不是使用大量 if-else 条件。

#include <iostream>
#include <vector>
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++程序将字符串中的所有辅音替换为最近的元音的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:tutorialspoint.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!