创建一个删除元音的函数
Posted
技术标签:
【中文标题】创建一个删除元音的函数【英文标题】:Creating a function to remove vowels 【发布时间】:2020-03-18 02:19:51 【问题描述】:我正在尝试创建一个函数来从带有空格的字符串(不是 cstring)中删除元音。 我需要将字符串传递给函数并将每个辅音添加到另一个字符串,该字符串将返回没有元音的字符串。我需要保留既有元音又有辅音的原始字符串。我坚持如何检查并在返回的字符串中添加辅音。 例如:输入:亚历山大·汉密尔顿 输出:lxndr Hmltn
#include <iostream>
#include <string>
using namespace std;
string removeVowels(string input, int size);
int main()
string input;
string vowlessFinal;
getline(cin, input);
cout << input;
vowlessFinal = removeVowels(input, 20);
cout << vowlessFinal;
string removeVowels(string input, int size)
string vowlessFinal;
int j = 0;
for (int i = 0; i < input.size(); i++)
//i have just 'a' below but i need to have the rest (including caps)
if (input.at(i) != 'a')
vowlessGuess.at(j) = input.at(i);
j++;
return vowlessFinal;
【问题讨论】:
您需要更改输入或返回输出。为了改变输入,你需要一个参考。基本功能的东西。 在抛出 'std::out_of_range' 实例后调用终止 what(): basic_string::at: __n (即 1) >= this->size() (即 1) 没有元音就是:中止 如果它运行,那么它编译成功,但是你有错误。不过,这是一个介绍性调试错误。索引超出范围意味着索引超出范围。学习如何使用 std::string 类,尤其是 size() 函数,它告诉你字符串有多长。 这不是编译器错误。你说它不会编译。您在这里写的错误是因为vowlessGuess
没有足够的空间分配给它。请改用string::push_back
。或者可能是size
大于input.size()
。
这是一种使用现代语言特性的方法:godbolt.org/z/stsqFy
【参考方案1】:
这应该涵盖所有情况。原始字符串的引用传递,以及要更改的字符串,它应该是调用者声明的空字符串:
void removeVowels(const std::string& input, std::string& result)
bool test = false;
const std::string targets = "aAeEiIoOuU";
for (const char& letter: input)
for (const char& target: targets)
if (target == letter) #test each vowel against string
test = true;
break; #exit loop if found
if (!test)
result.push_back(letter);
test = false;
return result;
策略是'如果测试字母在任何元音上匹配,则设置标志并退出循环;如果不是标志,则将该字母添加到新字符串中;为下一个元音循环重置标志。'
【讨论】:
【参考方案2】:嗯。我想知道人们是否不知道,或者是否有其他原因,但是 C++ 有一个专门的功能可以用其他东西替换某些东西:std::regex_replace
您可以用它替换任何模式并将结果分配给新字符串。然后你就可以使用一个班轮:
请看下面的例子:
#include <iostream>
#include <string>
#include <regex>
int main()
// The test string
std::string input"The quick brown fox jumps over the lazy dog.";
// Use simply the replace function
std::string output = std::regex_replace(input, std::regex("[aeiouAEIOU]"), "");
// SHow the output
std::cout << output << "\n";
return 0;
另请参阅this answer。你可以计算,如果一个字母是元音。
【讨论】:
以上是关于创建一个删除元音的函数的主要内容,如果未能解决你的问题,请参考以下文章