7.2 字符串的比较
可以通过多种方式对字符串与子字符串进行比较。例如,对两个字符串或两个字符串的部分进行比较,看两者是否相同;对两个独立的字符进行比较,看两者是否相同。
7.2.1 比较两个字符串
可以使用MATLAB中的函数比较两个字符串整体是否相同,方法如下。
· strcmp()函数用于判断两个字符串是否等价。
· 如果忽略大小写,那么strcmpi()函数用于判断两个字符串是否等价。
· strncmp()函数用于判断两个字符串的前n个字符是否等价。
· 如果忽略大小写,那么strncmpi()函数用于判断两个字符串的前n个字符是否等价。
使用strcmp()函数可以比较字符串,包括字符串前面或后面的空格。如果两个字符串完全相同,那么这个函数将返回1,否则返回0。strcmpi()函数与strcmp()函数类似,但strcmpi()函数忽略大小写(即将“a”与“A”视为相同)
strncmp()函数用来比较两个字符串的前n个字符,包含开头的空格,如果这n个字符是相同的,则返回1,否则返回0。strncmpi()函数与strncmp()函数相似,但strncmpi()函数忽略大小写。
为了更好地理解这些函数,输入如下所示的字符串:
字符串str1和字符串str2相同,但第1个字母的大小写不同。所以,strcmp()函数将返回0,strcmpi()函数将返回1。
字符串str1和字符串str3不相同,所以strcmp()函数与strcmpi()函数都返回0。但是字符串str1和字符串str3的前3个字符相同,所以如果按照如下所示的方式调用则返回1:
7.2.2 判断单个字符是否相等
可以利用MATLAB的关系运算符对字符数组中的每个元素进行检测,看是否相同,但要保证它们的维数是相同的,或者其中一个是标量。例如,可以用等于运算符(==)来检测两个字符串是否相匹配。
具体示例如下:
所有的关系运算符(>、>=、<、<=、==和~=)都是对字符所对应的ASCII值进行比较。与C语言不同,MATLAB中没有一个内建函数可以用于对两个字符串的整体进行“大于”或“小于”的关系运算。
7.2.3 在一个字符串内对字符进行判断
如下两个函数可以对一个字符串内的字符逐个进行分类。
· isletter()函数用于判断一个字符是否为字母。
· isspace()函数用于判断一个字符是否为空白字符(空格、制表符、换行符)。
如果要创建一个字符串mystring,可以输入如下所示的代码:
isletter()函数用于检测字符串中的每个字符,将产生一个与字符串isletter相同长度的输出向量,一个字符对应一个1。
在a中,前4个元素和最后一个元素是1,因为它们对应的mystring中的字符是字母。isspace()函数用于检测字符串中的每个字符,将产生一个和字符串长度相同的输出变量,对应于空字符的向量元素为0。
因为向量的第5个元素对应的是空格,所以向量的第5个元素的值为0。
MATLAB中提供的字符串比较函数如表7-1所示。
表7-1 MATLAB中提供的字符串比较函数