Vì không được sử dụng findstr
, kết hợp find
và strcmpi
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)
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
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