QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 845|回复: 0
打印 上一主题 下一主题

字符串比较函数---2

[复制链接]
字体大小: 正常 放大
回帖奖励 1 点体力 回复本帖可获得 1 点体力奖励! 每人限 1 次

413

主题

36

听众

1854

积分

升级  85.4%

  • TA的每日心情
    开心
    2019-9-18 21:55
  • 签到天数: 258 天

    [LV.8]以坛为家I

    社区QQ达人

    群组2015国赛冲刺

    群组2016美赛公益课程

    群组国赛讨论

    群组第三届数模基础实训

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2015-9-24 22:31 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

                                                            字符串比较函数---2

    4. 把算法转化为相应的MATLAB语句
    function result = c_strcmp(str1,str2)
    %C_STRCMP Compare strings like C function "strcmp"
    % Function C_STRCMP compares two strings, and returns
    % a -1 of str1 < str2, a 0 if str1 == str2, and a
    % +1 if str1 > str2.
    % Define variables:
    % diff                  -- Logical array of string differences
    % msg                   -- Error message
    % result                -- Result of function
    % str1                  -- First string to compare
    % str2                  -- Second string to compare
    % strings               -- Padded array of strings
    % Record of revisions:
    % Date      Programmer      Description of change
    % ====      ==========      =====================
    % 10/18/98  S. J. Chapman   Original code
    % Check for a legal number of input arguments.
    msg = nargchk(2,2,nargin);
    error(msg);
    % Check to see if the arguments are strings
    if ~(isstr(str1) & isstr(str2))
        error('Both str1 and str2 must both be strings!')
    else
        % Pad strings
        strings = strvcat(str1,str2);
        % Compare strings
        diff = strings(1, ~= strings(2,;
        if sum(diff) == 0
            % Strings match, so return a zero!
            result = 0;
        else
            % Find first difference between strings
            ival = find(diff);
            if strings(1,ival(1)) > strings(2,ival(1))
                result = 1;
            else
                result = -1;
            end
        end
    end


    5. 检测程序
    我们必须用多个字符串对程序进行检测
    >> result = c_strcmp('String 1','String 1')
    result =
         0
    >> result = c_strcmp('String 1','String 1     ')
    result =
         0
    >> result = c_strcmp('String 1','String 2')
    result =
        -1
    >> result = c_strcmp('String 1','String 0')
    result =
         1
    >> result = c_strcmp('String 1','str')
    result =
        -1
       第一次检测返回0,是因为两字符串是相同的。第二次也返回0,因为两字符串也是相等的,只是末端空格不同,末端空格被忽略。
              第三次检测返回-1,因为两字符串第一次的不同出现在第8位上,且在这个位置上“1<2”。第四次检测将返回1,因为两字符串第一次的不同出现在第8位上,且在这个位置上,“1>0”。第五次检测将会返回-1,因为两字符串的第一个字符就不同,在ascii的序列上“S<s”。这个函数工作正常。

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    数学中国版主团队!
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-21 01:40 , Processed in 0.592165 second(s), 55 queries .

    回顶部