数学建模社区-数学中国
标题: 字符串比较函数---1 [打印本页]
作者: 森之张卫东 时间: 2015-9-24 22:29
标题: 字符串比较函数---1
字符串比较函数---1
在C语言中,函数strcmp根据Ascii码中字符顺序(我们称之为字典顺序)比较两字符,如果第一个字符串的字典顺序在第二个字符串字典之后,函数将会产生-1,如果两字符串相同那么将会产生0,如果第一个字符串的字典顺序在第二个字符串字典之前那么函数将会返回+1。
创建一个MATLAB函数c_strcmp用来比较两字符串,其功能与C语言strcmp中的函数功能相类似。这个函数对字符串进行比较时,应忽略末尾的空格。注意这个函数必须控制两字符串不同长的情况。
答案:
1. 陈述问题
编写一个函数,比较两字符串str1和str2,并返回以下结果
l -1 如果str1在字典顺序比str2的晚
l 0 如果两字符串的字典顺序相同
l +1 如果str1的字典顺序比str2的早
2. 定义输入输出量
函数所需的输入量为两个字符串,str1和str2。这个函数的输出为-1、0或1。
3. 描述算法这个工程可分为以下四大步
Verify input strings
Pad strings to be equal length
Compare characters from beginning to end, looking for the firstdifference
Return a value based on the first difference
我们将以上每一大步分解成更小的更细的小块。第一,我们必须验证传递给函数的数据是正确的。函数必须有两个参数,且这两个参数必须为字符。这一步的伪代码为
% Check for a legal number of input arguments.
msg = nargchk(2, 2, nargin)
error(msg)
% Check to see if the arguments are strings
if either argument is not a string
error('str1 and str2must both be strings')
else
(add code here)
end
下一步,我们要做的是把这两个字符串具有相同的长度。最简单的方法是用strvcat函数把这两个字符串联合成一个二维数组。注意在这个步骤中产生字符串末端空格只是为了两字符串相等,所以这些空格可以被省略。
% Pad strings
strings = strvcat(str1, str2)
现在我们要对字符串中的每一个字符进行比较,直到我们一个不同的字符出现,并基于这种不同返回相应的值。为了达到这个止目的,其中的方法是应用关系运算符比较两个字符串,产生一个由0和1组成的数组。然后我们可以寻找第一个1,因为它两字符串在这里出现第一次不同。这一步的伪代码如下
% Compare strings
diff = strings(1,
~= strings(2, 
if sum(diff) == 0
% Strings match
result = 0
else
% Find first difference
ival = find(diff)
if strings(1, ival(1))> strings(2, ival(1))
result = 1
else
result = -1
end
end
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |