标题不是很有用,但基本上我要做的是对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推荐链接或其他令人敬畏的文档一样。
答案 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';
}
}
}
}