2010-01-13 38 views
5

Tôi có chuỗi const char * const trong một hàm. Tôi muốn sử dụng điều này để so sánh với các phần tử trong chuỗi.So sánh chuỗi Iterator với Char Pointer

Tôi muốn lặp qua chuỗi và sau đó so sánh với char *.

#include <iostream> 
#include <string> 
#include <cstring> 

using namespace std; 

int main() 
{ 

    const char * const pc = "ABC"; 
    string s = "Test ABC Strings"; 

    string::iterator i; 

    for (i = s.begin(); i != s.end(); ++i) 
    { 
    if ((*i).compare(pc) == 0) 
    { 
     cout << "found" << endl; 
    } 
    } 

Tôi có thể giải quyết char * để giải quyết chống lại trình lặp chuỗi như thế nào?

Cảm ơn ..

Trả lời

15

Nhìn vào std::string::find:

const char* bar = "bar"; 
std::string s = "foo bar"; 

if (s.find(bar) != std::string::npos) 
    cout << "found!"; 
+0

Doh, tôi không nghĩ rằng xa cả. Bạn nói đúng, sử dụng 'find' là một cách tiếp cận tốt hơn nhiều so với việc cố tự mình thực hiện lại nó. +1 – jalf

+0

hoạt động, cảm ơn! – donalmg

5
std::string::iterator it; 
char* c; 
if (&*it == c) 

dereferencing một iterator mang lại một tham chiếu đến nhọn để phản đối. Vì vậy, dereferencing cung cấp cho bạn một con trỏ đến đối tượng.

Sửa
Tất nhiên, đây không phải là rất có liên quan như một cách tiếp cận tốt hơn là để thả các so sánh hoàn toàn, và dựa vào các find chức năng đã tồn tại để làm những gì bạn muốn.

1

Không chính xác câu trả lời cho câu hỏi của bạn, nhưng có vẻ như bạn có thể được tốt hơn off với std::string::find phương pháp.

Something như thế:

const char * const pc = "ABC"; 
string s = "Test ABC Strings"; 
size_t pos = s.find(pc); 
Các vấn đề liên quan