C比较字符串

字符串比较是应用程序不可分割的一部分,我们会深入研究如何比较字符串,因为不正确的比较会产生误导或无效结果,理解字符串的比较能帮助你避开不正确的操作。这种认识能让你触类旁通。

比较字符串的标准方法是用strcmp函数,原型如下:

int strcmp(const char *s1, const char *s2);

要比较的两个字符串都以指向char常量的指针的形式传递,这让我们可以放心地使用这个函数,而不用担心传入的字符串被修改。这个函数返回以下三种值之一。

  • 负数
    如果按字典序(字母序)s1s2小就返回负数。
  • 0
    如果两个字符串相等就返回0。
  • 正数
    如果按字典序s1s2大就返回正数。

正数和负数返回值对于按字母序对字符串进行排序很有用,使用这个函数判断相等性的用法如下所示。用户的输入存储在command中,然后跟字符串字面量比较:

char command[16];

printf("Enter a Command: ");
scanf("%s", command);
if (strcmp(command, "Quit") == 0) {
printf("The command was Quit");
} else {
       printf("The command was not Quit");
}

本例的内存分配见图5-6。

enter image description here

图5-6:strcmp示例

比较两个字符串有几种不正确的写法,第一种试图用赋值操作符作比较,如下:

char command[16];

printf("Enter a Command: ");
scanf("%s",command);
if(command = "Quit") {
    ...

首先,这不是作比较,其次,这样会导致类型不兼容的语法错误,我们不能把字符串字面量地址赋给数组名字。在本例中,我们试图把字符串字面量的地址(也就是600)赋给commandcommand是数组,不用数组下标就把一个值赋给这个变量是不可能的。

另一种方法是用相等操作符:

char command[16];

printf("Enter a Command: ");
scanf("%s",command);
if(command == "Quit") {
    ...

这样会得到假,因为我们比较的是command的地址(300)和字符串字面量的地址(600)。相等操作符比较的是地址,而不是地址中的内容,用数组名字或者字符串字面量就会返回地址。

赞(1)

评论 抢沙发

评论前必须登录!

 

C指针