Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从控制台读入文本/字符串,直到遇到*为止_C++_String - Fatal编程技术网

C++ 从控制台读入文本/字符串,直到遇到*为止

C++ 从控制台读入文本/字符串,直到遇到*为止,c++,string,C++,String,所以我得到的问题/练习是: “输入是文本。编写一个程序修改输入的文本,以便删除所有元音。文本的结尾用*”这是我的英文翻译,可能不是100%准确 但是,当遇到*时,我应该如何停止输入?如果我必须首先存储值,我不能在执行过程中检查每个字符 可能是我没有很好地解释这个问题,但在解决方案中可以清楚地看到,输入的字符串在一行中,并且它在*之后结束读取值 这样做是否可行,或者如果我删除了在*之后输入的所有内容,是否允许这样做 还提供了C++中的实现,因为我必须使用它来进行考试。 (是的,我知道如何去掉元音)

所以我得到的问题/练习是: “输入是文本。编写一个程序修改输入的文本,以便删除所有元音。文本的结尾用*”这是我的英文翻译,可能不是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;
}
#包括
#包括
使用名称空间std;
char samoglasnici[5]={'a','e','i','o','u'};//samoglasnici==元音
字符串obrisiSamoglasnike(string tekst)//obrisiSamoglasnike==删除元音
{

对于(inti=0;i为了好玩,这里有一个稠密的版本。除了故意稠密之外,还告诉你如何

  • 通过在流缓冲区迭代器上操作来避免流处理
  • 避免存储临时缓冲区(这意味着如果输入为几GB,则解决方案将扩展)
  • 如何在实现“copy\u if”的同一循环中使用
    *
    作为循环结束条件

#包括
#包括
#包括
int main(){
使用名称空间std;
ostreambuf_迭代器输出(cout);
for(istreambuf_迭代器f(cin),l;f!=l;++f)
开关(*f){
大小写“*”:返回0;
案例“a”:案例“e”:案例“i”:案例“o”:案例“u”:继续;
默认值:*out++=*f;
}
}
免责声明:代码仅供参考,您的教授无论如何都不会接受


“在C++中也提供了一个实现”啊,你在那里失去了我。我不喜欢提供一个解决方案,抱歉,只是一个C++的提示。我想如果你努力了,你会在这里得到很好的答案,然后清楚地描述你被卡在哪里。如果你还没有编写任何代码,C++中的一个好提示就是“<代码> int main < /C>”。-但你可能已经过了,对吧?我已经用另一种方法解决了,我得到了字符串,然后删除了*.之后的所有内容。我会提供它。变量也是用我的语言的,对不起。
#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;
        }
}