C-风格字符串的比较
假设要直到字符数组中的字符串都不是mate。如果word是数组名,下面的测试可能并不能像我们预想的那样工作:
word == “mate”
请记住,数组名是数组的地址。同样,用引号括起的字符串常量也是其地址。因此,上面的关系表达式不是判断两个字符串是否相同,而是查看它们是否存储在相同的地址上,两个字符串的地址是否相同呢?答案是否定的,虽然它们包含相同的字符。
由于C++将C-风格字符串视为地址,因此如果使用关系运算符来比较它们,将无法得到满意的结果。相反,应使用C-风格字符串库中的strcmp()函数来比较。该程序接受两个字符串地址作为参数。这意味着参数可以是指针,字符串常量或字符数组名。如果两个字符串相同,该函数将返回零;如果第一个字符串按字母顺序排在第二个字符串之前,则strcmp()将返回一个负数值;如果第一个字符串按字母顺序排在第二个字符串之后,则strcmp()将返回一个正数值。实际上,“按系统排列顺序“比“按字母顺序”更准确。这意味着字符是根据字符的系统编码来进行比较的。例如,使用ASCII码时,所有大写字母的编码都比小写字母小,所以按排列顺序,大写字母将位于小写字母之前。因此,字符串“Zoo”咋字符串”aviary”之前,根据编码进行比较还以为着大写字母和小写字母是不同的,因此字符串”FOO”和字符串”foo”不同。