2014-09-04 17 views
7

Tôi đang cố gắng tìm một chuỗi trong một vectơ. Ví dụ: truy vấn = "ab" trong vector = ["ab", "cd", "abc", "cab"]Tìm kiếm một chuỗi cụ thể trong một vectơ (Octave)

Vấn đề là: Nó cung cấp tất cả các chỉ mục có chuỗi "ab" khi Tôi sử dụng hàm strfind (vectơ, truy vấn). Trong trường hợp này "ab" bao gồm "abc" và "cab". Nhưng tôi chỉ muốn chỉ số của "ab" không phải người khác. Có chức năng cụ thể nào cho điều này trong Octave không?

Trả lời

6

Sự cố xảy ra với cú pháp của bạn. Khi bạn thực hiện vector = ["ab", "cd", "abc", "cab"], bạn không tạo một vectơ của nhiều chuỗi đó, bạn sẽ ghép chúng vào một chuỗi duy nhất. Những gì bạn cần làm là tạo ra một mảng di động của chuỗi:

vector = {"ab", "cd", "abc", "cab"}; 

Và sau đó bạn có thể làm:

octave-cli-3.8.2> strcmp (vector, "ab") 
ans = 

    1 0 0 0 

Nhiều chức năng khác sẽ làm việc một cách chính xác với mảng di động của dây, bao gồm strfind mà trong trường hợp này cung cấp cho bạn các chỉ mục trên mỗi ô nơi chuỗi "ab" sao:

octave-cli-3.8.2> strfind (vector, "ab") 
ans = 
{ 
    [1,1] = 1 
    [1,2] = [](0x0) 
    [1,3] = 1 
    [1,4] = 2 
} 
+0

điều này là tốt. Nhưng bạn có thể vui lòng cho tôi biết cách thêm phần tử vào ô này không. Có chức năng sẵn có nào không? – user3713665

+1

Ngoài ra nếu có nhiều kết quả phù hợp hoặc bạn đang tìm kiếm nhiều chuỗi, hãy xem hàm 'ismember'. Liên quan đến việc thêm vào ma trận bạn có thể làm điều này: vector {end + 1} = 'new string'. Hãy xem [câu trả lời của tôi cho câu hỏi này] (http://stackoverflow.com/questions/25620636/how-to-use-cell-arrays-in-matlab/25621199#25621199) để biết thêm chi tiết. – Dan

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