2010-02-23 101 views

Trả lời

21

Vì vậy, bằng cách sử dụng chuỗi

str='the rain in spain falls mainly on the plain.' 

Đơn giản chỉ cần sử dụng chức năng thay thế regexp trong Matlab, regexprep

regexprep(str,'(\<[a-z])','${upper($1)}') 

ans = 

The Rain In Spain Falls Mainly On The Plain. 

Các \<[a-z] phù hợp với ký tự đầu tiên của mỗi từ mà bạn có thể chuyển đổi sang chữ in hoa bằng ${upper($1)}

Điều này cũng sẽ hoạt động bằng cách sử dụng \<\w để khớp với ký tự ở đầu mỗi từ.

+1

+1 Rất đẹp và ngắn. – Marcin

+1

Chúc mừng - mặc dù tôi không thể xác nhận quá nhiều tín dụng vì nó chỉ là một ví dụ được chỉnh sửa một chút từ các trang trợ giúp về cụm từ thông dụng. Phần thay thế chuỗi cung cấp một ví dụ để viết hoa chữ cái đầu tiên của mỗi sentance trong một chuỗi. – Adrian

+3

Một số người, khi đối mặt với một vấn đề, hãy nghĩ rằng "Tôi biết, tôi sẽ sử dụng các biểu thức chính quy." Bây giờ họ có hai vấn đề. :) – Marc

1

tải cách:

str = 'the rain in Spain falls mainly on the plane' 

spaceInd = strfind(str, ' '); % assume a word is preceded by a space 
startWordInd = spaceInd+1; % words start 1 char after a space 
startWordInd = [1, startWordInd]; % manually add the first word 
capsStr = upper(str); 

newStr = str; 
newStr(startWordInd) = capsStr(startWordInd) 

More thanh lịch/phức tạp - ô-mảng, textcan và cellfun rất hữu ích cho loại điều:

str = 'the rain in Spain falls mainly on the plane' 

function newStr = capitals(str) 

    words = textscan(str,'%s','delimiter',' '); % assume a word is preceded by a space 
    words = words{1}; 

    newWords = cellfun(@my_fun_that_capitalizes, words, 'UniformOutput', false); 
    newStr = [newWords{:}]; 

     function wOut = my_fun_that_capitalizes(wIn) 
      wOut = [wIn ' ']; % add the space back that we used to split upon 
      if numel(wIn)>1 
       wOut(1) = upper(wIn(1)); 
      end 
     end 
end 
2

Vì Matlab đi kèm với build in Perl, cho mỗi chuỗi phức tạp hoặc các tác vụ xử lý tệp, tập lệnh Perl có thể được sử dụng. Vì vậy, bạn có thể có thể sử dụng một cái gì đó như thế này:

[result, status] = perl('capitalize.pl','the rain in Spain falls mainly on the plane') 

nơi capitalize.pl là một kịch bản Perl như sau:

$input = $ARGV[0]; 
$input =~ s/([\w']+)/\u\L$1/g; 
print $input; 

Mã perl được lấy từ this Stack Overflow câu hỏi.

1
str='the rain in spain falls mainly on the plain.' ; 
for i=1:length(str) 
    if str(i)>='a' && str(i)<='z' 
     if i==1 || str(i-1)==' ' 
      str(i)=char(str(i)-32); % 32 is the ascii distance between uppercase letters and its lowercase equivalents 
     end 
    end 
end 

Ít ellegant và hiệu quả, dễ đọc hơn và duy trì.

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