2009-05-31 30 views

Trả lời

139

tôi sẽ sử dụng so sánh phương pháp:

std::string s("xyzblahblah"); 
std::string t("xyz") 

if (s.compare(0, t.length(), t) == 0) 
{ 
// ok 
} 
+0

Tôi đã quên về so sánh - đây là phương pháp tốt nhất, nhưng không cần sử dụng c_str (0 để nhận chuỗi ký tự –

+0

Bạn cũng có thể thực hiện chuỗi s ("xyz") == "xyz". :) – Skurmedel

+0

Neil, bạn hoàn toàn đúng, tôi đã chỉnh sửa câu trả lời và xóa c_str() gọi – Wacek

1

Tôi cảm thấy tôi không hiểu đầy đủ câu hỏi của bạn. Có vẻ như nó không đáng kể:

s[0]=='x' && s[1]=='y' && s[2]=='z' 

Điều này chỉ nhìn vào (tối đa) ba ký tự đầu tiên. Tổng quát cho một chuỗi mà không biết tại thời gian biên dịch sẽ yêu cầu bạn phải thay thế ở trên với một vòng lặp:

// look for t at the start of s 
for (int i=0; i<s.length(); i++) 
{ 
    if (s[i]!=t[i]) 
    return false; 
} 
+0

Vâng, tôi biết cách so sánh các chuỗi bằng cách sử dụng các hàm C. Câu hỏi của tôi là làm theo cách hướng đối tượng bằng phương tiện C++ STL. – jackhab

+0

Không có chức năng C nào được sử dụng tại đây. Và Thư viện chuẩn không loại trừ bạn khỏi việc viết những lời không công khai của riêng bạn. –

+5

và nếu t ngắn hơn s thì sao? – vidstige

8

Look để String Algo thư viện của Boost, mà có một số chức năng hữu ích, chẳng hạn như starts_with, istart_with (trường hợp không nhạy cảm), vv Nếu bạn muốn sử dụng chỉ là một phần của thư viện tăng trong dự án của bạn, sau đó bạn có thể sử dụng tiện ích BCP để sao chép các tập tin chỉ cần

11

cách tiếp cận Một có thể nhiều hơn giữ tinh thần của Thư viện chuẩn sẽ là để xác định thuật toán starts_with của riêng bạn.

#include <algorithm> 
using namespace std; 


template<class TContainer> 
bool begins_with(const TContainer& input, const TContainer& match) 
{ 
    return input.size() >= match.size() 
     && equal(match.begin(), match.end(), input.begin()); 
} 

này cung cấp một giao diện đơn giản để mã khách hàng và tương thích với hầu hết các container thư viện chuẩn.

+0

Tuyệt! Điều này nên được thêm vào để tăng cường! – David

+0

@David: Nếu tăng là phụ thuộc cho phép, hãy xem boost :: algorithm :: [starts_with] (http://www.boost.org/doc/libs/1_65_1/doc/html/boost/algorithm/starts_with.html) - 'Bắt ​​đầu bằng' vị từ – Gabor

Các vấn đề liên quan