MATLAB:大写字符串数组中的第一个字母

时间:2018-04-27 14:12:02

标签: string matlab

我应该如何访问,比如说,字符串数组的每个成员的第一个字符?例如,我想将每个单词的第一个字母大写。

str = ["house", "stone", "summer"]

5 个答案:

答案 0 :(得分:5)

您可以使用传统切片来完成。为了获得一封信的大写,我使用了upper函数

for i=1:size(str,2)
    str{i}(1)=upper(str{i}(1))
end

答案 1 :(得分:3)

我认为最好的解决方案是使用extractBefore和extractAfter:

upper(extractBefore(str,2)) + extractAfter(str,1);

以下是性能基准:

function profFunc

    str = ["house", "stone", "summer"];  

    n = 1E5;

    % My solution
    tic;
    for i = 1:n
        str = upper(extractBefore(str,2)) + extractAfter(str,1);
    end
    toc;

    % Mikhail Genkin's solution
    tic;
    for i = 1:n
        for i=1:size(str,2)
            str{i}(1)=upper(str{i}(1));
        end
    end
    toc;

    % EdR's Solution
    tic;
    for i = 1:n
        str = string(cellfun(@(x) [upper(x(1)) x(2:end)], str, 'UniformOutput', false));
    end
    toc
end

>> profFunc
Elapsed time is 0.121556 seconds.
Elapsed time is 1.034617 seconds.
Elapsed time is 10.319375 seconds.

答案 2 :(得分:1)

以下代码将执行您想要的操作:

string(cellfun(@(x) [upper(x(1)) x(2:end)], str, 'UniformOutput', false))

cellfun将跟随它的匿名函数应用于变量str。

匿名函数只返回第一个元素大写的连接,后跟字符串的其余部分。

string将单元格数组转换回字符串数组。

已编辑:可根据评论中的要求转换回字符串数组。

然而,另一个答案可能会产生更容易阅读的代码。

答案 3 :(得分:0)

调整@matlabbit的答案,以利用最近版本的MATLAB可以从string发出arrayfun数组的事实,你可以写

capitalize = @(s) upper(extractBefore(s, 2)) + extractAfter(s, 1)
arrayfun(capitalize, ["house", "stone", "summer"])

答案 4 :(得分:0)

关于这篇文章的两个有点迂腐的评论:

  1. 正确的语法是:

     arrayfun(@capitalize, ["house", "stone", "summer"]);
    
  2. 鉴于所涉及函数(upper、extractBefore、extractAfter)的矢量化性质,arrayfun 是多余的,即一个简单的函数调用应该可以工作:

     capitalize(["house", "stone", "summer"]);
    

请注意,这些备注已经在 R2020b 版本中进行了测试,尽管它也可能代表较早的版本。我自己没有测试过。