C++ C++;在输入中查找字符串并使用运算符
我一直在试图找到一种在cmd中使用字符串输入的方法,只要这些字符串存在,cmd的输出就会发生。下面是一些代码,这些代码可以正常工作,但仍然存在一些问题C++ C++;在输入中查找字符串并使用运算符,c++,string,operators,C++,String,Operators,我一直在试图找到一种在cmd中使用字符串输入的方法,只要这些字符串存在,cmd的输出就会发生。下面是一些代码,这些代码可以正常工作,但仍然存在一些问题 if (text.find("floor") && text.find("knife")!=std::string::npos) { std::cout << "Knife and Floor test" << std::endl; } if (text.fi
if (text.find("floor") && text.find("knife")!=std::string::npos)
{
std::cout << "Knife and Floor test" << std::endl;
}
if (text.find("knife") !=std::string::npos)
{
std::cout << "just knife" << std::endl;
}
有什么想法吗?谢谢大家! 试试下面的方法
if ( text.find( "floor" ) != std::string::npos &&
text.find( "knife" ) != std::string::npos )
{
std::cout << "Knife and Floor test" << std::endl;
}
else if ( text.find( "knife" ) != std::string::npos )
{
std::cout << "just knife" << std::endl;
}
//...
if ( text.find( "can" ) != std::string::npos )
{
if ( text.find( "elizabeth" ) != std::string::npos )
{
if ( text.find( "you" ) != std::string::npos )
{
std::cout << "1912" << std::endl;
}
}
}
else if ( text.find( "elizabeth" ) != std::string::npos )
{
std::cout << "just elizabeth" << std::endl;
}
if( ( text.find( "this" ) != std:;string::npos &&
( text.find("word" ) != std::string::npos ||
text.find( "thisword" )!= std::string::npos ) )
{
run
}
或
第一个if语句可以用以下方式重写
if ( text.find( "knife" ) != std::string::npos )
{
if ( text.find( "floor" ) != std::string::npos )
{
std::cout << "Knife and Floor test" << std::endl;
}
else
{
std::cout << "just knife" << std::endl;
}
}
if(text.find(“刀”)!=std::string::npos)
{
if(text.find(“floor”)!=std::string::npos)
{
标准::cout
只需输入“刀”即可进行“刀和地板测试”和“仅
刀。”
那么这是什么呢?
if (text.find("floor") && text.find("knife")!=std::string::npos)
{
std::cout << "Knife and Floor test" << std::endl;
}
本节:
if (text.find("can") !=std::string::npos)
{
if (text.find("elizabeth") !=std::string::npos)
{
if (text.find("you") !=std::string::npos)
{
std::cout << "1912" << std::endl;
}
}
}
if (text.find("elizabeth") !=std::string::npos)
{
std::cout << "just elizabeth" << std::endl;
}
if(text.find(“伊丽莎白”)!=std::string::npos)
{
std::cout您可以创建一些帮助函数,以便更容易地测试字符串是否匹配字符串列表中的某个内容(find_any()
),或者匹配列表中的所有项目(find_all()
)
find_all()
和find_any()
可以通过变量参数模板函数实现,但也有其他方法:
enum FIND_X { FIND_ALL, FIND_ANY };
template <typename... Strings>
bool find_any (std::string haystack, Strings... args) {
return find_x<FIND_ANY, Strings...>(haystack, args...);
}
template <typename... Strings>
bool find_all (std::string haystack, Strings... args) {
return find_x<FIND_ALL, Strings...>(haystack, args...);
}
template <FIND_X, typename T>
bool find_x (std::string haystack, T s) {
return findx(haystack, s);
}
template <FIND_X OP, typename T, typename... Strings>
bool find_x (std::string haystack, T s, Strings... args) {
if (haystack.find(s) != haystack.npos) {
if (OP == FIND_ANY) return true;
} else {
if (OP == FIND_ALL) return false;
}
return find_x<OP, Strings...>(haystack, args...);
}
enum FIND_X{FIND_ALL,FIND_ANY};
模板
bool find_any(std::string haystack、Strings…args){
返回find_x(haystack,args…);
}
模板
bool find_all(std::string haystack、Strings…args){
返回find_x(haystack,args…);
}
模板
bool find_x(标准::字符串haystack,ts){
返回findx(干草堆,s);
}
模板
bool find_x(std::string haystack、ts、Strings…args){
if(haystack.find(s)!=haystack.npos){
如果(OP==FIND_ANY)返回true;
}否则{
如果(OP==FIND_ALL)返回false;
}
返回find_x(haystack,args…);
}
你的第一个例子正是我想要的!讨厌它这么简单!谢谢!太棒了。当我不止一次使用字符串时,比如使用刀子的例子,我是否需要记住“if-else”呢?至于为什么事情不起作用,这和为什么不起作用一样。谢谢!将用屏幕打印来记录。text.find(“地板”)和&text.find(“刀”)!=std::string::npos这是不对的。你需要将两者分别与npos进行比较。有趣。使事情更简单、更精确。我可以用很多方法来使用它。我必须进行试验,并找到真正利用这一切的方法。巨大的帮助!谢谢!
if (text.find("floor") && text.find("knife")!=std::string::npos)
{
std::cout << "Knife and Floor test" << std::endl;
}
if (text.find("can") !=std::string::npos)
{
if (text.find("elizabeth") !=std::string::npos)
{
if (text.find("you") !=std::string::npos)
{
std::cout << "1912" << std::endl;
}
}
}
if (text.find("elizabeth") !=std::string::npos)
{
std::cout << "just elizabeth" << std::endl;
}
if (find_all(text1, "knife", "floor")) {
std::cout << "knife and floor test pass 1\n";
}
if (!find_all(text2, "knife", "floor")) {
std::cout << "knife and floor test pass 2\n";
}
if (!find_all(text3, "knife", "floor")) {
std::cout << "knife and floor test pass 3\n";
}
if (find_any(text2, "knife", "floor")) {
if (findx(text2, "knife")) {
std::cout << "knife or floor found knife\n";
}
}
if (find_any(text3, "knife", "floor")) {
if (findx(text3, "floor")) {
std::cout << "knife or floor found floor\n";
}
}
bool findx (std::string haystack, std::string s) {
return haystack.find(s) != haystack.npos;
}
enum FIND_X { FIND_ALL, FIND_ANY };
template <typename... Strings>
bool find_any (std::string haystack, Strings... args) {
return find_x<FIND_ANY, Strings...>(haystack, args...);
}
template <typename... Strings>
bool find_all (std::string haystack, Strings... args) {
return find_x<FIND_ALL, Strings...>(haystack, args...);
}
template <FIND_X, typename T>
bool find_x (std::string haystack, T s) {
return findx(haystack, s);
}
template <FIND_X OP, typename T, typename... Strings>
bool find_x (std::string haystack, T s, Strings... args) {
if (haystack.find(s) != haystack.npos) {
if (OP == FIND_ANY) return true;
} else {
if (OP == FIND_ALL) return false;
}
return find_x<OP, Strings...>(haystack, args...);
}