精华内容
下载资源
问答
  • Matlab函数字符串更改

    2020-01-01 16:51:53
    我用Matlab写代码时候,经常想把许多重复性的操作写成函数,但是在Matlab有工作空间里可能存在命名冲突的问题,比如写一个画矩形的函数rectangle,Matlab里已经有这个函数了,一个解决的办法是把这些自己写的函数都...

    需求

    我用Matlab写代码时候,经常想把许多重复性的操作写成函数,但是在Matlab有工作空间里可能存在命名冲突的问题,比如写一个画矩形的函数rectangle,Matlab里已经有这个函数了,一个解决的办法是把这些自己写的函数都放到一个类里去当做静态函数调用,函数前面加上类名,就不会冲突了。
    类里写静态函数的方法有两个:

    1. 直接在类定义文件,即有classdef的文件里写
    classdef sp
      methods (Static)
      function [] = func1()
      end
      function [] = func2()
      end
      end
    end
    

    像上面这样写,就可以写很多个函数,调用的时候只要用sp.func1就行了。但这样会存在一个问题,如果函数的代码量很大的话,再把这些函数都写在类定义文件里就显得臃肿。
    2. 在类定义文件放在@class文件夹里,上面的就写@sp,在@sp文件夹里写的函数就只有sp类才能调用了,
    假设func1.m里写了函数

    	function [] = func1()
    	end
    

    那只要在类定义文件里加上

    classdef sp
    	methods (Static)
    	[] = func1()
    	end
    end
    

    就可以了,但是这样又有一个问题,假如函数的声明发生了变化,我又得把改变了的函数声明拷贝到类定义文件里,非常麻烦。所以我就想写一m文件,把改变了的函数声明用代码写到类定义文件里。

    实现思路

    将类定义文件sp.m中放函数声明的前面加上一句注释begin_of_out_file,末尾加一句注释end_of_out_file

    判断是否含有某个字符串
    contains(str1,str2)
    
    读取文本文件的行
    tline = fgetl(fid)
    

    一行一行读下来,发现有begin_of_out_file的时候,将@sp文件夹下的所有m文件读进来

    funcList = dir([input_path,'/*.m']);
            func_str = '';
            for k = 1:length(funcList)
                if strcmp(funcList(k).name,name)==0&&...
                        strcmp(funcList(k).name,new_name)==0     
                    fid = fopen(fullfile(funcList(k).folder,...
                        funcList(k).name),'r');
                    tline = fgetl(fid);                               
                    tline = strrep(tline,'function ',repmat(' ',1,8));
                    func_str = sprintf('%s%s\n',func_str,tline);
                end
            end
    
    删除字符串
    tline = erase(tline,'function ');
    
    替换字符串
    tline = strrep(tline,'function ',repmat(' ',1,8));
    

    读取所有函数的第一行,将function替换成空格,再写到新文件中去,同时,begin_of_out_file和end_of_out_file之间的将摒弃掉。

    注意事项

    1. 为了防止写错,留了个备份文件
    2. 本来最后想用movefile用新文件替换旧文件的,但报错文件正在使用

    完整代码

    clear;close all;clc
    %%
    input_path = 'E:\MatlabCode\Resonator\code\@sp\';
    %%
    name = 'sp.m';
    new_name = 'sp_1.m';
    orgname = fullfile(input_path, name);
    dstname = fullfile(input_path, new_name);
    backup_name = fullfile(input_path,'sp.txt');
    copyfile(orgname,backup_name);
    fr = fopen(orgname,'r');
    fw = fopen(dstname,'w');
    %%
    while true
        tline = fgetl(fr);
        if tline == -1
            break;
        end
        flag = contains(tline,'begin_of_out_file');
        if ~flag
            fprintf(fw,'%s\r\n',tline);       
        else
            fprintf(fw,'%s\r\n',tline);
            funcList = dir([input_path,'/*.m']);
            func_str = '';
            for k = 1:length(funcList)
                if strcmp(funcList(k).name,name)==0&&...
                        strcmp(funcList(k).name,new_name)==0
                    
                    fid = fopen(fullfile(funcList(k).folder,...
                        funcList(k).name),'r');
                    tline = fgetl(fid);              
                    tline = strrep(tline,'function ',repmat(' ',1,8));
                    func_str = sprintf('%s%s\n',func_str,tline);
                end
            end
            fprintf(fw,'%s\r\n',func_str);
            while 1
                tline = fgetl(fr);
                flag = contains(tline,'end_of_out_file');
                if flag == 1
                    fprintf(fw,'%s\r\n',tline);
                    break;
                end
            end
        end
        
    end
    %%
    fclose(fr);
    fclose(fw);
    %%
    movefile(dstname,orgname)
    
    展开全文
  • Matlab字符串函数及二维字符串字符串函数二维字符串 字符串函数 >> str1 = 'I am a boy'; str2 = 'I am a girl'; >> strcmp(str1,str2) %相同为1,不相同为0 ans = 0 >> findstr(str1,'a') % ...

    Matlab的字符串函数及二维字符串

    字符串函数

    >> str1 = 'I am a boy';
    str2 = 'I am a girl';
    >> strcmp(str1,str2)  %相同为1,不相同为0
    
    ans = 0
    
    >> findstr(str1,'a') % 输出与str1中与'a'相同字符的序号
    
    ans =
    
         3     6
    
    >> findstr(str1,'am') % 输出与str1中与'am'相同字符的序号
    
    ans = 3
    
    >> findstr(str1,'amry') % 输出与str1中与'amry'相同字符的序号,没找到返回空矩阵
    
    ans =  []
    
    >> strcat(str1,str2) % 连接两个字符
    
    ans = 'I am a boyI am a girl'
    
    >> [str1,str2]  % 连接两个字符
    
    ans = 'I am a boyI am a girl'
    
    >> [str1,str2']  % 报错,这种方式只能连接维数相同的字符矩形
    错误使用 horzcat
    要串联的数组的维度不一致。
     
    >> strcat(str1,str2')
    
    ans =
    
      11×11 char 数组
    
        'I am a boyI'
        'I am a boy '
        'I am a boya'
        'I am a boym'
        'I am a boy '
        'I am a boya'
        'I am a boy '
        'I am a boyg'
        'I am a boyi'
        'I am a boyr'
        'I am a boyl'
    
    >> disp(str2)
    I am a girl
    

    二维字符串

    >> ['I am a boy ','I am a girl'] %缺的部分用空格补齐
    
    ans =
    
        'I am a boy I am a girl'
    
    >> strvcat(str1,str2) %构成二维字符串
    
    ans =
    
      2×11 char 数组
    
        'I am a boy '
        'I am a girl'
    
    >> str2mat(str1,str2)
    
    ans =
    
      2×11 char 数组
    
        'I am a boy '
        'I am a girl'
    
    >> % 区别:如果中间空行,strvcat会忽略,str2mat不会
    str2mat(str1,'',str2)
    
    ans =
    
      3×11 char 数组
    
        'I am a boy '
        '           '
        'I am a girl'
    
    >> strvcat(str1,'',str2)
    
    ans =
    
      2×11 char 数组
    
        'I am a boy '
        'I am a girl'
    
    展开全文
  • 类似于字符数组,不过Matlab字符串是用单引号括起来的字符序列。也是以ASCII码形式存储。 >> str='LuYihang'; >> str(3:6) ans = 'Yiha' 注意:若字符串中的字符含有单引号,则该单引号字符要用两个...

    字符串表示

    类似于字符数组,不过Matlab中字符串是用单引号括起来的字符序列。也是以ASCII码形式存储。

    >> str='LuYihang';
    >> str(3:6)
    ans =
        'Yiha'
    

    注意:若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。

    >> str2='LuYi''hang'
    str2 =
        'LuYi'hang'
    

    字符串矩阵

    也可以建立多行字符串,形成字符串矩阵。

    >> ch=['a:f';'1:6']
    ch =    //可以看到字符串中相用a:f代替abcdef是不行的,a:f就是一个字符串
      2×3 char 数组
        'a:f'
        '1:6'
    >> ch(2,2)
    ans =
        ':'
    

    例题:建立一个字符串向量,然后对该向量做如下处理:
    1 取第1~5个字符组成的子字符串。
    2 将字符串倒过来重新排列。
    3 将字符串中的小写字母变成相应的大写字母,其余字符不变。
    4 统计字符串中小写字母的个数。

    >> ch='ABc123d4e56FG90';
    >> subch=ch(1:5)
    subch =
        'ABc12'
    //题目1
    >> revch=ch(end:-1:1)
    revch =
        '09GF65e4d321cBA'
    //题目2
    >> k=find(ch>='a'&ch<='z')
    k =
         3     7     9
    >> ch(k)=ch(k)-32
    ch =
        'ABC123D4E56FG90'
    //题目3  支持ASCII码
    >> length(k)
    ans =
         3
    //题目4
    

    字符串操作

    1. 字符串的执行
    格式: eval(s) s是字符串,作用是将字符串中的内容作为Matlab命令来执行,实现由键盘输入命令,而不是预先设置好命令,相比更灵活。

    >> t=pi;
    >> m='[t,sin(t),cos(t)]';
    >> m
    m =
        '[t,sin(t),cos(t)]'
    >> eval(m)
    ans =
        3.1416    0.0000   -1.0000
    

    2. 字符串与数值之间的转换
    abs和 double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。
    char函数可以把ASCII码矩阵转换为字符串矩阵。

    >> s1='MATLAB';
    >> a=abs(s1)
    a =
        77    65    84    76    65    66
    >> b=char(a)
    b =
        'MATLAB'
    

    3. 字符串的比较
    字符串的比较有两种方法:利用关系运算符或字符串比较函数。
    关系运算符比较:两个字符串里的每个字符依次按ASCII值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素要么是1,要么是0。

    >> 'www 0'>='W1234'
    ans =
      1×5 logical 数组
    
       1   1   1   0   0
    

    使用关系运算符比较的前提:两个字符串的长度必须相等。

    字符串比较函数用于判断字符串是否相等,有4种比较方式,函数如下:
    1 strcmp(s1,s2):用来比较字符串s1和s2是否相等,如果相等,返回结果为1,否则返回0。
    2 strncmp(s1,s2,,n):用来比较两个字符串前n个字符是否相等,如果相等返回1,否则返回0。
    3 strcmpi(s1,s2):在忽略字母大小写前提下,比较字符串s1和s2是否相等,如果相等返回1,否则返回0。
    4 strncmpi(s1,s2,n):在忽略字符串大小写前提下,比较两个字符串前n个字符是否相等,如果相等返回1,否则返回0。

    >> strncmpi('www0','W123',1)
    ans =
      logical
    
       1
    

    4. 字符串的查找与替换
    strfind(s1,s2):返回字符串s2在字符串s1中的开始位置。
    strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3。

    注意还有个findstr(s1,s2)函数,区别在于findstr函数中s1 s2无先后顺序区别,返回短字符串在长字符串中的开始位置。

    >> strfind('ababedabababedfg','bed')
    ans =
         4    12
    >> strfind('bed','ababedabababedfg')
    ans =
         []
    >> findstr('bed','ababedabababedfg')
    ans =
         4    12
         
    >> strrep('ababedabababedfg','bed','toy')
    ans =
        'abatoyababatoyfg'
    
    展开全文
  • matlab字符串函数的用法

    千次阅读 2020-03-30 11:06:14
    字符串matlab中应用很多,下面就关于字符串的中级应用进行阐述。 disp函数,显示字符串,例如:disp(str); size函数,判断字符串长度,size(str); 对字符串反序输出,str2 = str(end:-1:1),其中-1和1分别是反序...

    字符串在matlab中应用很多,下面就关于字符串的中级应用进行阐述。
    disp函数,显示字符串,例如:disp(str);
    size函数,判断字符串长度,size(str);
    对字符串反序输出,str2 = str(end:-1:1),其中-1和1分别是反序输出的起始点和结束位置;
    将字符串输出为ASCII码,str_ascii = double(str);
    将两个字符串连接起来,str = [str1, str2],除此之外还可以通过strcat函数将两个字符串连接起来,s1 = strcat(str1, str2);
    strvcat函数,将多个字符串变为矩阵;
    建立字符串矩阵,s=[‘Boy’;‘boy’] ,需要注意的是,在建立字符串矩阵时,长度需要保持一致;
    利用char建立字符串矩阵式则不要长度一致,如 c=char(‘daxian’,‘yipintang’) ;
    建立字符串单元数组,celldata=cellstr©;
    strcmp函数,判断两个字符串是否相等,a = strcmp(str1,str2);
    strncmp函数,判断两个字符串前n个字符是否相等,a = strncmp(str1,str2,5),代表判断前5个字符是否相等;
    strfind函数,字符串查找函数,返回结果为该字符在字符串中的位置;
    strrep函数,字符串替换函数,a = strrep(str,‘zhangsan’,‘lisi’),使用lisi代替原先字符串中的zhangsan,如果在原字符串中没有zhangsan,则返回原先的字符串,也就是不替换。
    上述就是我们在日常使用中常用到的关于字符串的一些函数。不足之处还请大家进行补充。

    展开全文
  • 第2部分实战练习(自己做的)2.1c#调用matlab函数matlab版本2009b,c#版本vs2008.2.1.1matlab函数编译成dll文件(1)首先编写一个函数的m文件,如MatrixOpera表示两个矩阵相加和相减。%--------------------------------...
  • MATLAB字符串转换函数

    2020-08-19 04:30:59
    文章简单介绍了MATLAB字符串转换函数的运算过程
  • matlab处理字符串的一些函数

    千次阅读 2012-01-08 14:12:31
    matlab处理字符串的一些函数 字符串和它的ASCII表示之间转换外,MATLAB还提供了大量的其它的有用的字符串转换函数。它们包括: 表6.1 字 符 串 转 换 abs 字符串到ASCII转换 dec2hex 十进制...
  • matlab字符串操作函数

    万次阅读 2017-03-13 20:51:35
    matlab字符串操作函数积累记录 主要介绍了matlab字符串操作函数,相关的字符串操作对于平时的数据相关处理有较大的帮助
  • 自己的配置:(1)Microsoft Visual Studio 2005(2)Matlab R2009a(3)iis 6.0第一步:首先安装Matlab;安装Visual Studio 2005或者更高版本;安装MCRInstall.exe,我安装完Matlab之后在这里找得的:D:"ProgramFiles\...
  • matlab字符串函数

    千次阅读 2018-05-29 17:03:46
    字符串操作函数:eval() :执行运行字符串的表达式 num2str() :将数字转换为字符串,由于主要接触的还是在科学计算方面,使用较多的还是在多变量批量命名上。类似的函数还有int2str,mat2str,str2double等,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,499
精华内容 599
关键字:

matlab函数字符串

matlab 订阅