2016-04-28 22 views
5

Có hàm nào trong Octave trả về vị trí của lần xuất hiện đầu tiên của một chuỗi trong một mảng ô không?Octave - trả về vị trí của lần xuất hiện đầu tiên của một chuỗi trong một mảng ô

Tôi tìm thấy findstr nhưng điều này trả về một véc tơ mà tôi không muốn. Tôi muốn những gì index hiện nhưng nó chỉ hoạt động cho chuỗi.

Nếu không có chức năng như vậy, có mẹo nào về cách thực hiện không?

+0

Bạn có muốn sự xuất hiện đầu tiên trong mỗi tế bào hoặc cho toàn bộ mảng di động? – excaza

+0

Mở lại từ bản sao vì câu hỏi này yêu cầu tìm ** lần xuất hiện đầu tiên ** của chuỗi, chứ không phải ** tất cả các lần xuất hiện **. Câu trả lời được chấp nhận cũng xử lý sắc thái của việc không thể tìm thấy chuỗi. Câu hỏi này có sự khác biệt cơ bản dẫn đến một giải pháp khác. – rayryeng

Trả lời

5

Vì không được sử dụng findstr, kết hợp findstrcmpi có thể hữu ích. strcmpi so sánh các chuỗi bằng cách bỏ qua trường hợp các chữ cái có thể hữu ích cho mục đích của bạn. Nếu đây không phải là những gì bạn muốn, hãy sử dụng chức năng không có dấu sau i, vì vậy strcmp. Các đầu vào strcmpi hoặc strcmp là những chuỗi để tìm kiếm str và cho trường hợp của bạn các thông số đầu vào bổ sung là một mảng tế bào A các chuỗi tìm kiếm trong. Kết quả của strcmpi hoặc strcmp sẽ cung cấp cho bạn một vector của logical giá trị mà mỗi vị trí k cho bạn biết chuỗi k trong mảng ô A có khớp với str hay không. Sau đó, bạn sẽ sử dụng find để tìm tất cả các vị trí có chuỗi phù hợp, nhưng bạn có thể hạn chế hơn nữa bằng cách chỉ định số lượng vị trí tối đa n cũng như nơi hạn chế tìm kiếm của bạn - cụ thể nếu bạn muốn xem đầu tiên hoặc cuối cùng n vị trí nơi chuỗi phù hợp.

Nếu chuỗi mong muốn là trong str và mảng di động của bạn được lưu trữ trong A, chỉ cần làm:

index = find(strcmpi(str, A)), 1, 'first'); 

Nói cách khác, find sẽ tìm thấy tất cả các địa điểm nơi mà các chuỗi phù hợp, trong khi các thông số thứ hai và thứ ba nói bạn chỉ trả lại chỉ mục đầu tiên của kết quả. Cụ thể, điều này sẽ trả về lần xuất hiện đầu tiên của chuỗi được tìm kiếm mong muốn hoặc mảng trống nếu không tìm thấy nó.

Ví dụ Run

octave:8> A = {'hello', 'hello', 'how', 'how', 'are', 'you'}; 
octave:9> str = 'hello'; 
octave:10> index = find(strcmpi(str, A), 1, 'first') 
index = 1 
octave:11> str = 'goodbye'; 
octave:12> index = find(strcmpi(str, A), 1, 'first') 
index = [](1x0) 
+1

Đáng chú ý rằng 'strcmp' /' strcmpi' chỉ so sánh * chuỗi đầy đủ *, vì vậy nếu bạn đang tìm kiếm chuỗi con tồn tại, bạn có thể sẽ cần sử dụng regex. – excaza

+0

@excaza Bình luận hay. Tôi cho rằng OP muốn tìm chuỗi đầy đủ. Ngôn ngữ gợi ý như vậy, nhưng giả định của tôi đã cắn tôi trong @ $$ trước đây. – rayryeng

+1

@rayryeng Điều này thật hoàn hảo! Cảm ơn bạn. Và bạn giả định là đúng, tôi muốn tìm kiếm chuỗi đầy đủ. – CH123

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