C ++ else如果字符串中的char

时间:2017-04-22 09:16:29

标签: c++ if-statement

标题不是很有用,但基本上我要做的是对txt文件进行检查,找到包含我正在寻找的内容的单词。

以下代码正确完成了我想要它如何做到这一点。但是!

void qu()
{
    for (Word word : word2)
    {
        string uq = word.getWord();
        if (uq.find("qa") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qb")!= std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qc") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qd") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qe") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qf") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qg") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qh") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qi") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qj") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qk") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("ql") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qm") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qn") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qo") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qp") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qq") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qr") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qs") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qt") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qv") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qw") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qx") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qy") != std::string::npos)
        {
            cout << uq << '\n';
        }
        else if (uq.find("qz") != std::string::npos)
        {
            cout << uq << '\n';
        }
    }
}

我想以更整洁的方式做到这一点。

如果有人能指出我正确的方向,就像cplusplus推荐链接或其他令人敬畏的文档一样。

3 个答案:

答案 0 :(得分:0)

下面的代码将以与您相同的顺序执行,并且有点整洁:

public class ImageFragment extends BasicFragment{
@Override
public BasicFragment provideYourFragment() {

    return new ImageFragment();
}

@Override
public View provideYourFragmentView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.image_fragment,parent,false);

    //Get your parent layout of fragment
    RelativeLayout layout = (RelativeLayout)view;

    //Now specific components here

    ImageView imageView = (ImageView)layout.findViewById(R.id.myImage);
    imageView.setImageResource(android.R.drawable.ic_media_play);

    return view;

}
}

答案 1 :(得分:0)

用数据替换代码。

创建一个包含您要查找的单词的容器,例如std::set<std::string>。然后添加一个内部循环,对每个单词执行if检查。

以下是一个例子:

std::set<std::string> const search_words =  { "qa", "qb", "qc", /*...*/ "qz" };
for (auto const& word : word2)
{
    std::string const uq = word.getWord();
    for (auto const& search_word : search_words)
    {
        if (uq.find(search_word) != std::string::npos)
        {
            std::cout << uq << '\n';
        }
    }
}

如果std::set<std::string>始终相同,则static无需具有自动存储持续时间。例如,您可以将其设为某个类的std::set数据成员。

在任何情况下,除非您处理的是非常大的数据,否则这个简单的解决方案就足够了。在这种情况下,您应该从算法的角度找到更精细的方法,但这取决于您的输入的实际结构。

另一个可能的问题当且仅当这是性能关键代码时,std::vector可能会有点慢。我之所以选择它,是因为它保证所有元素都是独一无二的。但是你总是可以用spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL 替换它,看看是否能为你带来任何好处。

答案 2 :(得分:0)

InternetAussie回答

您可以将所有字符串放入向量中,并使用for循环迭代并查找每个字符串:

void qu()
{
for (Word word : word2)
{
    std::string uq = word.getWord();
    std::vector<std::string> strings_to_find =
    {
        "qa", "qb", "qc", "qd", "qe", "qf", "qg", "qh", "qi", "qj", "qk",
        "ql", "qm", "qn", "qo", "qp", "qr", "qs", "qt", "qv", "qw", "qx",
        "qy", "qz"
    }; // no "qu" in original code

    for (auto& str : strings_to_find)
    {
        if (uq.find(str) != std::string::npos)
        {
            cout << uq << '\n';
        }
    }
}
}