2011-09-02 68 views
1

我对C++不太好,我无法在任何地方找到它,如果这是一个糟糕的问题,请道歉。我有一个指针,我想知道如果某些名称存储在这个指针开始与一些特定的字符串。如蟒蛇像(也许这是一个坏榜样):检查一个指针是否有一些字符串C++

if 'Pre' in pointer_name: 

这是我有:

double t = 0; 
for (size_t i =0; i < modules_.size(); ++i){ 
    if(module_[i].name() == "pre"){ // here is what I want to introduce the condition 
     if (modules_[i].status() == 2){ 
      std::cout << module_[i].name() << "exists" << std::endl; 
     } 
    } 
} 
+5

澄清:你使用C风格的字符串而不是'std :: string'出于某种不可理解的原因,并且你想比较每个字符串的某个子字符串与给定的字符串。是对的吗? –

+4

(顺便说一句,你不“存储”任何“在”一个指针,而不是一个内存地址。) –

+0

感谢您的更正..我真的很感激它。 :) – Alejandro

回答

4

的Python 'Pre' in string_name的当量是:

string_name.find("Pre") != std::string::npos // if using string 

std::strstr(pointer_name, "Pre") // if using char* 

的Python string_name.startswith('Pre')的当量( “开始于一些特定的字符串”)是:

string_name.size() >= 3 && std::equal(string_name.begin(), string_name.begin() + 3, "Pre"); // if using string 

string_name.find("Pre") == 0 // less efficient when it misses, but shorter 

std::strncmp(pointer_name, "Pre", 3) == 0 // if using char* 

在两个的情况下,在实践中,您可能希望通过测量您正在搜索的字符串来避免使用文字3

+0

Hi @ steve-jessop并感谢您的回答,所以代码应该是这样的?'for(size_t i = 0; i Alejandro

+0

对包含'hltL1'的'modules_'的每个元素做些什么,是的。 –

+0

感谢!!!!!! :) – Alejandro

2

检查std::string::find,有足够多的好例子。如果您使用的是c风格字符串,请使用strstr

+0

用于比较? –

+1

@Tony需要'这个指针的某些名字存储在一些特定的字符串开始,使用比较? –

+0

谢谢@亩巧所以,应该是这样的:'double t = 0; size_t找到; for(size_t i = 0; i Alejandro

1

如果您的name变量的类型为std::string那么您可以使用name().compare("Pre") == 0进行字符串比较。

编辑:似乎我误解了这个问题,因为包含你可以使用字符串查找,如其他说。

使用C风格的字符串,在C++中不建议使用char *。他们很容易出错。

+2

这是等价的,不包含。 – Puppy

+0

@ Dead:是的,你说的没错,似乎我误解了OP的问题 –

+0

'name()。compare(“Pre”)== 0'可以写成name()==“Pre”或“Pre “== name()' – user102008

1

您可以使用algorithm头文件来完成大部分的事情,通常是python中的一行。

在这种情况下,虽然使用string find方法可能会更简单。

相关问题