Tôi có một vector<string> vectorStrings
với các giá trị: ta, bc, ac, st, cer, cda
. Tôi muốn tìm sự xuất hiện đầu tiên của bất kỳ chuỗi nào trong vectơ trong chuỗi đầu vào.Tìm sự xuất hiện đầu tiên của một chuỗi từ một vector <string>
ví dụ:
InputStr = "this certainly helps";
Trong số chuỗi được đưa ra trong vector, tôi sẽ muốn có một cách để nói "cer"
là sự xuất hiện đầu tiên ở vị trí 5
.
int min = 9999999;
string first;
for(int i = 0; i < vectorStrings.size(); i++)
{
int pos = InputStr.find(vectorStrings[i]);
if(pos == string::npos)
continue;
if(pos < min)
{
min = pos;
first = vectorStrings[i];
}
}
// values of min and first gives which string occurred first
// and at the position of it in the input string
thực hiện này làm việc, nhưng tôi muốn biết nếu có tồn tại một cách thanh lịch hơn để làm điều này với các thư viện tăng hoặc thư viện std.
Tôi đang làm việc trên Windows và sử dụng Visual Studio 2010.
Tôi không biết gì về tao nhã, nhưng tôi nghĩ rằng các vòng ngoài nên đi qua các ký tự chuỗi và vòng lặp bên trong (trong trường hợp của bạn - tìm) trên các chuỗi trong vectơ của bạn. Tôi nghĩ rằng sẽ hiệu quả hơn –
Bạn có thể làm cho min 'string :: size_type min = string :: npos;' (mà cũng có thể cho phép bạn thoát khỏi thử nghiệm 'pos == npos'). – UncleBens
Bạn có thể sử dụng một trình lặp. ;) –