精华内容
下载资源
问答
  • matlab字符串

    2020-05-25 10:57:17
    MATLAB中,下标索引都是从1开始 操作函数: 函数大全 创建字符串 双引号直接创建 a="hello" 还可以用string函数把字符向量转换成字符串 chr='hello' str=string(chr) 使用 [] 运算符创建一个包含多个字符串的...

    字符串是用单引号括起来的字符序列
    若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示
    在MATLAB中,下标索引都是从1开始

    操作函数:
    函数大全

    创建字符串

    双引号直接创建

    a="hello"
    

    还可以用string函数把字符向量转换成字符串

    chr='hello'
    str=string(chr)
    

    使用 [] 运算符创建一个包含多个字符串的字符串数组。str 是一个 2×3 字符串数组,其中包含六个字符串

    str = ["Mercury","Gemini","Apollo";
           "Skylab","Skylab B","ISS"]
    

    通过 strlength 函数计算 str 中的每个字符串的长度。使用 strlength 而非 length 来确定字符串中的字符数量。

    L = strlength(str)
    

    作为备选方法,您可以使用 string 函数将字符向量元胞数组转换为字符串数组。MATLAB 使用双引号显示字符串数组中的字符串,使用单引号显示元胞数组中的字符向量。

    C = {'Mercury','Venus','Earth'}
    str = string(C)
    

    除了字符向量,您还可以使用 string 函数将数值、日期时间、持续时间和分类值转换为字符串。

    将数值数组转换为字符串数组。

    X = [5 10 20 3.1416];
    string(X)
    

    将日期时间值转换为字符串。
    创建空字符串和缺失字符串

    字符串数组可以包含空值和缺失值。空字符串不包含字符。当您显示空字符串时,结果为一对其间不包含任何内容的双引号 ("")。缺失字符串相当于数值数组的 NaN。它指示字符串数组包含缺失值的位置。当您显示缺失字符串时,结果为 ,且不带任何引号。

    使用 strings 函数创建一个空字符串数组。在不带任何参数的情况下调用 strings 时,将会返回一个空字符串。请注意,str 的大小是 1×1,而不是 0×0。但是,str 不包含字符。

    str = strings
    

    str =
    “”

    使用单引号创建一个空字符向量。请注意,chr 的大小是 0×0。

    chr = ''
    

    chr =

    0x0 empty char array

    创建一个所有元素都是空字符串的字符串数组。您可以使用 strings 函数预分配一个字符串数组。

    str = strings(2,3)
    

    str = 2x3 string array
    “” “” “”
    “” “” “”

    要创建缺失字符串,请使用 string 函数转换缺失值。缺失字符串显示为 。

    str = string(missing)
    

    str =

    您可以创建同时包含空字符串和缺失字符串的字符串数组。使用 ismissing 函数确定哪些元素为包含缺失值的字符串。请注意,空字符串不是缺失字符串。

    str(1) = "";
    str(2) = "Gemini";
    str(3) = string(missing)
    

    str = 1x3 string array
    “” “Gemini”

    ismissing(str)
    

    ans = 1x3 logical array

    0 0 1

    将一个缺失字符串与另一个字符串进行比较。结果始终为 0 (false),即使您将一个缺失字符串与另一个缺失字符串进行比较也是如此。

    str = string(missing);
    str == "Gemini"
    

    ans = logical
    0

    str == string(missing)

    ans = logical
    0

    访问字符串数组的元素

    字符串数组支持数组运算,例如进行索引和重构。使用数组索引访问 str 的第一行以及所有列。

    str = ["Mercury","Gemini","Apollo";
           "Skylab","Skylab B","ISS"];
    str(1,:)
    

    ans = 1x3 string array
    “Mercury” “Gemini” “Apollo”

    访问 str 的第二行中的第二个元素。

    str(2,2)
    

    ans =
    “Skylab B”

    在 str 的边界之外分配一个新字符串。MATLAB 将扩展该数组并使用缺失值填充未分配的元素。

    str(3,4) = "Mir"
    

    str = 3x4 string array
    “Mercury” “Gemini” “Apollo”
    “Skylab” “Skylab B” “ISS”
    “Mir”

    访问字符串中的字符

    您可以使用花括号 {} 对字符串数组进行索引以直接访问字符。当您需要访问和修改字符串元素中的字符时,请使用花括号。通过花括号进行索引为可处理字符串数组或字符向量元胞数组的代码提供了兼容性。但是只要有可能,请尽量使用字符串函数来处理字符串中的字符。

    使用花括号访问第二行中的第二个元素。chr 是一个字符向量,而不是字符串。

    str = ["Mercury","Gemini","Apollo";
           "Skylab","Skylab B","ISS"];
    chr = str{2,2}
    

    chr =
    ‘Skylab B’

    访问该字符向量并返回前三个字符。

    str{2,2}(1:3)
    

    ans =
    ‘Sky’

    查找字符串中的空格字符,并将这些字符替换为短划线。使用 isspace 函数检查字符串中的单个字符。isspace 会返回一个逻辑向量,只要存在一个空格字符,该向量即包含一个 true 值。最后,显示修改后的字符串元素 str(2,2)。

    TF = isspace(str{2,2})
    

    TF = 1x8 logical array

    0 0 0 0 0 0 1 0

    str{2,2}(TF) = "-";
    str(2,2)
    

    ans =
    “Skylab-B”

    请注意,在该示例中,您也可以使用 replace 函数来替换空格,而无需借助于花括号索引。

    replace(str(2,2)," ","-")
    

    ans =
    “Skylab-B”

    将字符串串联到字符串数组中

    将字符串串联到字符串数组中,就像您串联任何其他类型的数组一样。

    使用方括号 [] 串联两个字符串数组。

    str1 = ["Mercury","Gemini","Apollo"];
    str2 = ["Skylab","Skylab B","ISS"];
    str = [str1 str2]
    

    str = 1x6 string array
    “Mercury” “Gemini” “Apollo” “Skylab” “Skylab B” “ISS”

    转置 str1 和 str2。将它们进行串联,然后将列标题垂直串联到字符串数组上。当您将字符向量串联到字符串数组中时,字符向量会自动转换为字符串。

    str1 = str1';
    str2 = str2';
    str = [str1 str2];
    str = [["Mission:","Station:"] ; str]
    

    str = 4x2 string array
    “Mission:” “Station:”
    “Mercury” “Skylab”
    “Gemini” “Skylab B”
    “Apollo” “ISS”

    向字符串追加文本

    要向字符串追加文本,请使用 plus 运算符 +。plus 运算符可向字符串追加文本,但不会更改字符串数组的大小。

    在名字数组中追加一个姓氏。如果您将某个字符向量追加到字符串,则该字符向量将自动转换为字符串。

    names = ["Mary";"John";"Elizabeth";"Paul";"Ann"];
    names = names + ' Smith'
    

    names = 5x1 string array
    “Mary Smith”
    “John Smith”
    “Elizabeth Smith”
    “Paul Smith”
    “Ann Smith”

    追加不同的姓氏。您可以将文本从一个字符串数组或字符向量元胞数组追加到另一个字符串数组。当您添加非标量数组时,这些数组的大小必须相同。

    names = ["Mary";"John";"Elizabeth";"Paul";"Ann"];
    lastnames = ["Jones";"Adams";"Young";"Burns";"Spencer"];
    names = names + " " + lastnames
    

    names = 5x1 string array
    “Mary Jones”
    “John Adams”
    “Elizabeth Young”
    “Paul Burns”
    “Ann Spencer”

    追加缺失字符串。当您使用加号运算符追加缺失字符串时,输出为一个缺失字符串。

    str1 = "Jones";
    str2 = string(missing);
    str1 + str2
    

    ans =

    拆分、联接和排序字符串数组

    MATLAB 提供了一组丰富的函数来处理字符串数组。例如,您可以使用 split、join 和 sort 函数重新排列字符串数组 names,以使名字按姓氏的字母顺序排列。

    按空格字符拆分 names。拆分会将 names 从 5×1 字符串数组更改为 5×2 数组。

    names = ["Mary Jones";"John Adams";"Elizabeth Young";"Paul Burns";"Ann Spencer"];
    names = split(names)
    

    names = 5x2 string array
    “Mary” “Jones”
    “John” “Adams”
    “Elizabeth” “Young”
    “Paul” “Burns”
    “Ann” “Spencer”

    将 names 的列交换位置,使姓在第一列。在每个姓后面添加一个逗号。

    names = [names(:,2) names(:,1)];
    names(:,1) = names(:,1) + ','
    

    names = 5x2 string array
    “Jones,” “Mary”
    “Adams,” “John”
    “Young,” “Elizabeth”
    “Burns,” “Paul”
    “Spencer,” “Ann”

    将姓和名联接起来。join 函数在它联接的字符串之间放置一个空格字符。进行联接之后,names 为一个 5×1 字符串数组。

    names = join(names)
    

    names = 5x1 string array
    “Jones, Mary”
    “Adams, John”
    “Young, Elizabeth”
    “Burns, Paul”
    “Spencer, Ann”

    对 names 的元素进行排序,使它们按字母顺序排列。

    names = sort(names)

    names = 5x1 string array
    “Adams, John”
    “Burns, Paul”
    “Jones, Mary”
    “Spencer, Ann”
    “Young, Elizabeth”

    参考

    展开全文
  • Matlab字符串的处理: 在MATLAB中,字符串是用单引号括起来的字符序列(双引号括起来也可以) 若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示,或者直接将整个字符串用双引号引起来 在MATLAB中...

    Matlab 字符串处理的若干问题总结

     

     

     

    基本说明


     

    Matlab字符串的处理:

    • 在MATLAB中,字符串是用单引号括起来的字符序列(双引号括起来也可以)
    • 若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示,或者直接将整个字符串用双引号引起来
    • 在MATLAB中,下标索引都是从1开始,无论是数据是数组,矩阵,结构体还是元组数据类型

     

    1. 字符串中含有单引号



    我们知道,matlab 中一个字符串由单引号标识,如果一个字符串中本身含有单引号,比如xi'an(地名,西安),使用转义符是不奏效的。matlab 提供的做法是,双单引号标识一个单引号:

    1 >> addr = 'xi''an'
    2 addr =
    3 xi'an
    4 123

     

    2. 字符串拼接


     

    [] 进行的是字符串的拼接;
    {} 定义的则是cell,即元组;

    这涉及到 matlab 的编程设计思想问题,也即 matlab 是围绕矩阵展开的,而 matlab 下的矩阵必须是数值型的,而不可以是字符串矩阵,想要定义一个结构来存放多个字符串,可以使用 {},而不可以使用构建matlab 矩阵)[](等价于 strcat)。

     

    3. 使用 char()函数


    1 >> asc = char(reshape(32:127,32,3)')
    2 asc =
    3 
    4 !"#$%&'()*+,-./0123456789:;<=>?
    5 @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
    6 `abcdefghijklmnopqrstuvwxyz{|}~

     

    当 char() 函数接受多参数时,也即

    S = char(T1,T2,...,TN)

     

    将会构建 char 型二维矩阵(使用矩阵的方式进行索引),行数为参数的个数,列数为单个参数的最大长度。


    4. 字符串比较


     

    strcmp()
    strcmpi():大小写不敏感,即case insensitive;

     

    5. deblank


     

    Remove trailing whitespace from end of character array. (删除序列尾部(注意仅仅是尾部,不包括头部的空格)的空格)。

     

    6. 字符串切割(split)



    使用正则表达式:

    >> str = 'hello world hello China';
    >> splited = regexp(str, ' ', 'split');
    >> splited
    splited = 
    'hello' 'world' 'hello' 'China'

     

    注意 regexp(str, ' ', 'split') 得到的是元组类型。


    7. strfind():返回元素的下标


     

    >> strfind('hello|world', '|')
    6

     

    8. char ⇔ ASCII,字符和其对应ASCII编号的转换



    (1)ASCII ⇒ char

    >> char([97, 98, 99])
    ans =
    
    abc

     

    (2)char ⇒ ASCII

    >> abs('abc')
    ans =
    
    97 98 99


    9. 字符串的拼接



    字符串(str1、str2)的拼接使用 [str1, str2] 或 [str1 str2]。
    注意,str1 + str2 所做的动作就不是拼接了(C++中重载了的运算符+可以实现字符串拼接功能),而是首先转换为 ascii 码类型,再进行相加的操作,这就要求两串的长度必须相等,

    >> str1 = 'hello'; str2 = 'world';
    >> str1 + str2 
    ans =
    
    223 212 222 216 211

     

     

    >> abs(str1) + abs(str2)
    ans =
    
    223 212 222 216 211

     

     

    参考:

     

    https://blog.csdn.net/lanchunhui/article/details/51337203?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

    展开全文
  • matlab字符串的操作

    2019-02-18 11:58:14
    s= regexp(str, char, ‘split’) 实现字符串分割 使用索引实现去后缀名 &amp;gt;&amp;gt; str = 'git_hub.com'; &amp;gt;&amp;gt; s = regexp(str, '_', 'split'); &amp;gt;&amp;gt; s{1,1...

    s= regexp(str, char, ‘split’) 实现字符串分割
    使用索引实现去后缀名

    >> str = 'git_hub.com';
    >>  s = regexp(str, '_', 'split');
    >> s{1,1} 
    
    ans =
    
        'git'
    
    >> s{1,2}
    
    ans =
    
        'hub.com'
    
    >> new_n =  s{1,2}(1:end-1)
    
    new_n =
    
        'hub.co'
    
    >> new_m =  s{1,2}(1:end-4)
    
    new_m =
    
        'hub'
    
    >> 
    

    字符串的比较
    tf = strcmp(s1,s2)

    s1 = 'Yes';
    s2 = 'No';
    tf = strcmp(s1,s2)
    tf = logical
       0
    
    s1 = 'Yes';
    s2 = 'Yes';
    tf = strcmp(s1,s2)
    tf = logical
       1
    
    展开全文
  • 一个matlab函数,可以实现类似 C 语言中 strcmp 的功能、数字矩阵转字符串或元胞矩阵、查找一个字符串字符串矩阵或元胞矩阵中的索引

    1、字符串比较

    今天遇到一个问题,想用Matlab比较两个字符串的大小,以为用>、<、==即可,谁知道这些比较符号返回的是一个逻辑矩阵(并且一般还要求两个字符串长度一致),在网上搜了下说加all()、any()即可。确实,all的意思是 【所有的都】,any的意思是【只有一个就】,但是不能判断谁大谁小,matlab自带的strcmp只能判断两个字符串是否相等(相等为真,否则为假),也不能判断谁大谁小,偶然发现一个前辈写了个函数,这个函数的功能类似于C语言中的strcmp:

    • str1>str2, return 1
    • str1==str2, return 0
    • str1<str2, return -1

    做点摘抄,以防下次再次入坑,函数如下:

    function p=mstrcmp(str1,str2)
    k=min(length(str1),length(str2));
    for n=1:k   %Compare the top k
        if(str1(n)>str2(n))
            p=1;break;
        elseif(str1(n)==str2(n))
            p=0;
        else p=-1;break;
        end
    end
    if(p==0)
        if(length(str1)>length(str2)) %The first k bits are equal, but str1 is longer
            p=1;
        elseif(length(str1)==length(str2))
            p=0;
        else p=-1;
        end
    end
    end
    

    2、数字矩阵转字符串(元胞)矩阵

    补于2021.3.23
    字符串矩阵

    function satlist=num2sat_char(sys,num)
    %this function can trans numList to charSatList
    satlist=[];
    for i=num
        satlist=[satlist;sys,num2str(i,'%02d')];
    end
    end
    

    元胞矩阵

    function satlist=num2sat_cell(sys,num)
    %this function can trans numList to cellSatList
    satlist={};
    for i=num
        satlist=[satlist,cellstr([sys,num2str(i,'%02d')])];
    end
    end
    

    3、查找位置

    补于2021.3.23

    1 字符串矩阵

    function prn=find_sat_char(satlist,sat)
    %this function can find the sat index from a charSatList
    n=size(satlist,1);
    prn=0;
    for i=1:n
        if mstrcmp(satlist(i,:),sat)==0
            prn=i;
            break;
        end
    end
    end
    
    function satlist=num2sat_char(sys,num)
    %this function can trans numList to charSatList
    satlist=[];
    for i=num
        satlist=[satlist;sys,num2str(i,'%02d')];
    end
    end
    
    function p=mstrcmp(str1,str2)
    %this function can strcap two str(>1 =0 <-1)
    k=min(length(str1),length(str2));
    for n=1:k   %Compare the top k
        if(str1(n)>str2(n))
            p=1;break;
        elseif(str1(n)==str2(n))
            p=0;
        else p=-1;break;
        end
    end
    if(p==0)
        if(length(str1)>length(str2)) %The first k bits are equal, but str1 is longer
            p=1;
        elseif(length(str1)==length(str2))
            p=0;
        else p=-1;
        end
    end
    end
    

    调用

    num=[1:3,5:32];
    sys='G';
    satlist=num2sat_char(sys,num);
    sat='G30';
    prn=find_sat_char(satlist,sat) %29
    sat='G0';
    prn=find_sat_char(satlist,sat) %0 can't find
    

    ps:一看就知道我搞卫星的。

    2 元胞矩阵

    function p=mstrcmp(str1,str2)
    %this function can strcap two str(>1 =0 <-1)
    k=min(length(str1),length(str2));
    for n=1:k   %Compare the top k
        if(str1(n)>str2(n))
            p=1;break;
        elseif(str1(n)==str2(n))
            p=0;
        else p=-1;break;
        end
    end
    if(p==0)
        if(length(str1)>length(str2)) %The first k bits are equal, but str1 is longer
            p=1;
        elseif(length(str1)==length(str2))
            p=0;
        else p=-1;
        end
    end
    end
    
    function satlist=num2sat_cell(sys,num)
    %this function can trans numList to cellSatList
    satlist={};
    for i=num
        satlist=[satlist,cellstr([sys,num2str(i,'%02d')])];
    end
    end
    
    function prn=find_sat_cell(satlist,sat)
    %this function can find the sat index from a cellSatList
    n=length(satlist);
    prn=0;
    for i=1:n
        if mstrcmp(satlist{i},sat)==0
            prn=i;
            break;
        end
    end
    end
    

    调用

    num=[1:3,5:32];
    sys='G';
    satlist=num2sat_cell(sys,num);
    sat='G30';
    prn=find_sat_cell(satlist,sat)  %29
    sat='G0';
    prn=find_sat_cell(satlist,sat)  %0
    
    展开全文
  • matlab 字符数组与字符串

    千次阅读 2018-11-30 09:31:56
    写了近二十年的代码,停了一阵就傻了,matlab双引号和单引号都分不清了。 之前用matlab涉及到文件读写,变量类型...string转到char数组,用convertStringsToChars,字符串数组转到char数组元胞列表为扩展。    ...
  • MATLAB中的字符串处理

    万次阅读 多人点赞 2018-08-18 12:10:37
    MATLAB中,字符串是用单引号括起来的字符序列 若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示 在MATLAB中,下标索引都是从1开始 案例: 建立一个字符串向量,然后对该向量做如下处理: 取第...
  • 可以对字符串数组进行索引、重构和进行串联,就像处理任何其他类型的数组一样。此外,还可以访问字符串中的字符,并使用plus运算符向字符串追加文本。要重新排列字符串数组中的字符串,请使用split、join和sort等...
  • 字符串是由字符组成的一个不可变序列,和元组作用类似,也支持索引、切片、重复、合并等操作。Python中统一了“字符”和“字符串”的概念,字符串的内容放在一对引号中,可以是一对单引号、双引号或三引号。注意:...
  • 您可以对字符串数组进行索引、重构和进行串联,就像处理任何其他类型的数组一样。有关详细信息,请参考创建字符串数组。 字符串数组的行为大多数方面与字符向量和字符向量元胞数组类似。但是,字符串数...
  • 方法一首先通过[C{:}]操作,将cell内的元素转化为数组,然后再对数组执行find()函数,返回要查找字符串索引。 局限性 这种方法 只对数字(包括小数) 或单个char(单个字符) 有效。 如果对多个字符操作会出现如下错误...
  • 基本的数学运算与矩阵运算MATLAB基本语法变量变量名保留变量不适合做变量名变量不应当覆盖内置函数变量...MATLAB进行矩阵运算定义矩阵向终端输入矩阵使用冒号运算符创建向量定义特殊矩阵矩阵的索引矩阵的操作操作...
  • 字符串可以用单引号,双引号,三引号成对括起来,索引用[]界定,切片用[:]来省略和连接,这点类似于Matlab。 >>> s1='Python' >>> s2=' is cool!' >>> str=s1+s2 >>> str 'Python is cool!' >>> str[0] 'P' >>> str...
  • 我们知道在字符串中寻找匹配的字符串可以用strfind() 和findstr() 两个函数,但是通过xlsread函数从Excel中导出的数据为元胞,这样就不能使用strfind函数了,这种情况下有两种办法。 1、用ismember()函数,这个...
  • python:字符串

    2018-01-29 20:00:30
    字符串是由字符组成的序列(sequnence),所以它是有序的。 可以用括号运算符-[ ]-中括号来...因为索引表示的是从字符串七点开始的位移量(offset)。当然,索引值都是整数,否则会出错。 TypeError: string indic
  • 如果出现这个问题,可能是冒号运算符前后的结果中存在NAN。可以试着设置断点,并查看冒号运算符前后的结果,或者是整个矩阵。...我自己的是用字符串对运算中的一个应是整数的变量赋值,我个憨憨… ...
  • Matlab的元组的索引问题

    千次阅读 2018-08-29 11:23:22
    Matlab 元组数据的索引问题 实际上,今天在研究的时候,实际上有两种数据的索引的方式...由于是字符串的形式,我们把它转化为数值的形式。   可见 要是索引元组中的数据, 这个时候,我们需要使用的是,大括号...
  • Python做字符串处理

    2017-09-16 21:43:23
    今天在修改C++和Matlab的代码的时候,出现了...下面为Matlab代码,需要转换成C++,即将所有的下标索引值减1.  A1  6 * M(10) - 6 * M(14) - 6 * M(18) + 6 * M(2) + 6 * M(28) - 6 * M(32) - 6 * M(36) - 6 * M
  • PART1: A = dir(fullfile('source path','*.whatever')); %取数据源文件夹下所有文件的属性 取source path下所有文件的文件属性给A。...在字符串中插入变量。 新建n个文件夹: for i = 1 :...
  • MATLAB中list中写入字符串经常发现上面的问题。 == 问题发生的原因是matlab中如果是list文件,需要字符串的长度相同。== 解决方案在于,如果是想写入字符串,尽量建议最初就构建一个cell,空cell的构建语法如下: ...
  • 基本逻辑逻辑运算逻辑索引 程序如下: # coding=utf-8 from numpy import array,random #--------------逻辑-------------# print(1.0==1) # 只比较数值 print(1.0==2) print(1=='12') # 这点比matlab...
  • 第二列是字符串,我想根据向量a的值对dict的第一列进行索引,得到a中的值在dict第一列中的位置索引值,即index = [1,10,2,18,14,11]。 现在我有一种方式可以得到这个结果,代码如下所...
  • matlab开发-Timeindex

    2019-08-26 09:46:16
    matlab开发-Timeindex。TimeIDX返回给定时间字符串的数字索引

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

matlab字符串索引

matlab 订阅