所以我得到的问题/练习说: "输入是文本。编写一个修改输入文本的程序,以便删除所有元音。文本的末尾用*"表示。这是我的英文翻译,可能不是100%准确。
但是如果我必须首先存储值,我应该在遇到*时停止输入,我不能在执行期间检查每个字符。
可能我没有很好地解释这个问题,但在解决方案中,我们清楚地看到输入的字符串在一行中并且它在*之后结束读取值。
是否可以这样做,或者如果我只删除*之后输入的所有内容,是否允许它?
还提供了c ++实现,因为我必须将它用于考试。 (是的,我知道如何删除元音)
以下是我的解决方案,只删除了' *':
之后的所有内容#include <iostream>
#include <string.h>
using namespace std;
char samoglasnici[5] = {'a','e','i','o','u'}; // samoglasnici == vowels
string obrisiSamoglasnike(string tekst) // obrisiSamoglasnike == deleteVowels
{
for(int i = 0; i<tekst.length(); i++)
{
for(int j = 0; j<5; j++)
{
if(tekst[i]==samoglasnici[j])
tekst[i] = ' ';
}
}
return tekst;
}
int main()
{
cout << "Unesi neki tekst: " << endl; // enter some text
string tekst;
getline(cin, tekst);
tekst = tekst.substr(0,tekst.find('*') + 1);
cout << obrisiSamoglasnike(tekst);
return 0;
}
答案 0 :(得分:0)
为了好玩,这里是一个密集的版本。除了故意密集,确实告诉你如何
*
作为循环结束条件。的 Live On Coliru 强>
#include <iostream>
#include <iterator>
#include <algorithm>
int main() {
using namespace std;
ostreambuf_iterator<char> out(cout);
for(istreambuf_iterator<char> f(cin), l; f!=l; ++f)
switch(*f) {
case '*': return 0;
case 'a': case 'e': case 'i': case 'o': case 'u': continue;
default: *out++ = *f;
}
}
免责声明:仅限灵感代码,您的教授不会接受此