从字符串“ Hello,祝你有美好的一天”中删除所有辅音

时间:2018-12-23 15:21:09

标签: c++ string

我已经看到很多很好的代码来解决这个问题。我是编码新手。我的问题是我的逻辑哪里出了问题。我认为问题出在第二个字符串str1上。我没有初始化它。即使当我用if逐元素打印时,它也能正常工作。但是当我尝试打印整个字符串str1时,它不起作用。

#include<iostream>
#include<string>


using namespace std;


int main()
{
 string str = "Hello, have a good day", str1;





 for (int i = 0, j =0; i < str.length(); ++i)
 {


    if((str[i]>='a'&& str[i]<='z') || (str[i]>='A'&& str[i]<='Z'))
        if (str[i] == 'I' || str[i] == 'i' || str[i] == 'U' || str[i] == 'u' || str[i] == 'O' || str[i] == 'o' || 
            str[i] == 'A' || str[i] == 'a' || str[i] == 'E' || str[i] == 'e' )
        {
            str1[j] = str[i];
            //std::cout << str1[j] ;
            j++;
        }
    else 
    {
        str1[j] = str[i];
        j++;

    }   

 }

 cout << str1 <<'\n';

}

输出只是空白。

2 个答案:

答案 0 :(得分:2)

要做的第一件事是编写一个确定字符是否为辅音的函数:

bool is_not_consonant(char ch) {
    static char consonants[] = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
    return std::find(std::begin(consonants), std::end(consonants), ch) == std::end(consonants);
}

然后将该函数用作std::copy_if的谓词:

std::string result;
std::string input = whatever;
std::copy_if(std::begin(input), std::end(input),
    std::back_inserter(result),
    is_not_consonant);

答案 1 :(得分:1)

说明

问题是您不需要else条件。您所需要做的就是检查元音,并在发现if条件正确覆盖的情况下进行打印。

代码

尝试一下:

#include<string>
using namespace std;
int main()
{
    string str = "Hello, have a good day", str1;
    for (int i = 0; i < str.length(); ++i)
    {
        if((str[i]>='a'&& str[i]<='z') || (str[i]>='A'&& str[i]<='Z'))
            if (str[i] == 'I' || str[i] == 'i' || str[i] == 'U' || str[i] == 'u' || str[i] == 'O' || str[i] == 'o' || str[i] == 'A' || str[i] == 'a' || str[i] == 'E' || str[i] == 'e' )
            {
                str1 += str[i];
            }

    }
    cout << str1 <<'\n';
}