Используйте для своей выгоды / Используют для своей выгоды первую букву каждого слова в строке в Matlab?

Что лучший способ состоит в том, чтобы использовать для своей выгоды / используют для своей выгоды первую букву каждого слова в строке в Matlab?

т.е.
дождь в Испании падает главным образом на плоскость
кому:
Дождь в Испании падает главным образом на плоскость

8
задан Rook 23 February 2010 в 16:09
поделиться

4 ответа

Таким образом, используя строку

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

Просто используйте функцию замены регулярного выражения в Matlab, regexprep

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

ans =

The Rain In Spain Falls Mainly On The Plain.

\ <[az] соответствует первому символу каждого слова, которое вы можете преобразовать в верхний регистр, используя $ {upper ($ 1)}

Это также будет работать с использованием \ <\ w для сопоставления символа в начале каждого слова.

regexprep(str,'(\<\w)','${upper($1)}')
21
ответ дан 5 December 2019 в 06:37
поделиться

Поскольку Matlab поставляется с build in Perl , для каждой сложной задачи обработки строк или файлов можно использовать сценарии Perl. Так что вы могли бы использовать что-то вроде:

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

где capitalize.pl является скриптом Perl следующим образом:

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

Код perl был взят из этого вопроса Stack Overflow.

2
ответ дан 5 December 2019 в 06:37
поделиться

Много способов:

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)

Более элегантные/сложные - массивы клеток, textscan и cellfun очень полезны для таких вещей:

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
1
ответ дан 5 December 2019 в 06:37
поделиться
    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

Менее изящные и эффективные, более читаемые и удобные для обслуживания.

1
ответ дан 5 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: