2009-09-15 32 views
26

Tôi đang cố gắng để thực hiện điều này:Matlab chức năng strcat rắc rối với các không gian

strcat('red ', 'yellow ', 'white ') 

tôi mong đợi để xem "trắng vàng đỏ", tuy nhiên, tôi thấy "redyellowwhite" trên đầu ra lệnh. Những gì cần phải được thực hiện để đảm bảo các không gian được ghép nối đúng cách? Cảm ơn trước.

+3

@ # $ @! # $ @! khác gotcha mâu thuẫn giữa Matlab và C.> :( –

+0

Cách giải quyết nhanh: 'cstrcat (" anh "," l "," lo ")', giữ gìn không gian. Nguồn: http://stackoverflow.com/a/14025999/ 445131 –

+0

Có rất nhiều quyết định thiết kế ngu ngốc trong Matlab, nhưng tôi đã không mong đợi một cái gì đó đơn giản như thế này là một vấn đề, quá! – houbysoft

Trả lời

20

Từ matlab trang trợ giúp cho strcat:.

"strcat bỏ qua trailing ASCII ký tự khoảng trắng và bỏ qua tất cả các nhân vật như vậy từ đầu ra ký tự không gian trắng trong ASCII là không gian, xuống dòng, vận chuyển trở lại, tab, dọc tab hoặc các ký tự dạng thức ăn, tất cả đều trả về một đáp ứng thực sự từ hàm không gian MATLAB. Sử dụng cú pháp ghép nối [s1 s2 s3 ...] để giữ lại các dấu cách. strcat không bỏ qua các đầu vào là mảng ô của chuỗi. "

20

Mặc dù STRCAT bỏ qua trailing không gian màu trắng, nó vẫn giữ nguyên không gian trắng hàng đầu. Hãy thử điều này:

strcat('red',' yellow',' white') 

Ngoài ra, bạn chỉ có thể sử dụng cú pháp nối:

['red ' 'yellow ' 'white '] 
1

hoặc bạn có thể nói:

str = sprintf('%s%s%s', 'red ', 'yellow ', 'white ') 
11

Bạn có thể bảo vệ dấu khoảng trắng trong strcat() hoặc tương tự chức năng bằng cách đặt nó vào một ô.

str = strcat({'red '}, {'yellow '}, {'white '}) 
str = str{1} 

Không hữu ích trong ví dụ cơ bản này. Nhưng nếu bạn kết thúc việc thực hiện các hoạt động "vectơ" trên các chuỗi, nó rất tiện dụng. Nối mảng thường xuyên không thực hiện việc nối 1-đến-nhiều mà strcat thực hiện.

strs = strcat({'my '}, {'red ','yellow ','white '}, 'shirt') 

Gắn 'my' vào ô mặc dù đó là một chuỗi duy nhất sẽ giữ khoảng trắng. Lưu ý rằng bạn phải sử dụng biểu mẫu {} thay vì gọi hàm cellstr(), chính nó sẽ loại bỏ khoảng trắng ở cuối. Điều này có thể là do Matlab có hai dạng biểu diễn danh sách các chuỗi: như một mảng cellstr, trong đó tất cả khoảng trống là quan trọng, và như một mảng char 2 chiều trống, với mỗi hàng được coi là một chuỗi, và khoảng trắng cuối bị bỏ qua. Dạng cellstr giống nhất các chuỗi trong Java và C; biểu mẫu char 2-D có thể hiệu quả hơn nếu bạn có nhiều chuỗi có độ dài tương tự. Chức năng thao tác chuỗi của Matlab là đa hình trên hai biểu diễn, và đôi khi thể hiện sự khác biệt như thế này. Một char charalal như 'foo' là một trường hợp một chuỗi thoái hóa của dạng char 2-D, và các chức năng của Matlab coi nó như vậy.

+1

Tuyệt vời, điều đó đã giúp tôi khi tôi muốn nối một số mảng ô chuỗi với một '''' ký tự: 'dateTime {:} = strcat (ngày, {''}, thời gian)' – quazgar

+0

Điều này đã giúp tôi quá để bảo vệ khoảng trắng . Bí quyết tốt để biết. BTW, bạn đang rất gần (nếu chưa) đến 1k cho thẻ MATLAB. Xin chúc mừng sớm về việc nhận vàng :) – rayryeng

+0

Mẹo hay. Tôi chỉ đang tìm kiếm điều này. – chengvt

13

Trong thực tế, bạn chỉ có thể sử dụng mã ASCII của không gian: 32. Vì vậy, bạn có thể giải quyết vấn đề như thế này:

str = strcat('red', 32, 'yellow', 32, 'white'); 

Sau đó, bạn sẽ nhận được str = 'red yellow white'.

+2

Ồ, buồn cười là nó hoạt động, mặc dù 'strcat ('đỏ', '', 'vàng', '', 'trắng')' loại bỏ các khoảng trắng ... –

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