1.入门
当我们想要一个字符和字符串中的某个字符进行比较时,可以直接用“==”进行比较。
为什么可以用“==”?
因为字符是存放在常量区,字符变量的值是固定的,字符之间的比较,本质上是对字符的ASCII比较。ASCII_百度百科 (baidu.com)
1.如果字符串是字符指针的形式
字符串指针的地址,就是字符串中第一个字符的地址,指针的地址+1,就是字符串中第二个字符的地址,依次类推,我们对地址解引用,就可以得到字符串中某个位置的字符,这样就可以进行字符与字符之间的比较了。
2.如果字符串是字符数组的形式
就利用数组下标,获取对应位置的字符,然后进行字符之间的比较即可。
2.提升
理解了字符串与字符的比较,上面是将字符串中的字符提取出来,与另一个字符进行比较,其实我们还可以将字符强制转换成字符串,进行字符串之间的比较。不过,字符串之间的比较大小,本质上会转换成字符之间的大小比较。
我们可以模拟strcmp函数,
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <assert.h>
int strcmp_imi(const char* arr1, const char* arr2)
{
assert(arr1 && arr2);
while (*arr1 == *arr2)
{
if (*arr1 == '\0' && *arr2 == '\0')
{
//字符串相等返回0
return 0;
}
arr1++;
arr2++;
}
return *arr1 - *arr2;
}
int main()
{
char arr1[] = "";
char arr2[] = "";
while (1)
{
scanf("%s%s", arr1, arr2);
int jud = strcmp_imi(arr1, arr2);
if (jud == 0)
{
printf("字符串相等\n");
}
else if (jud != 0)
{
printf("字符串不相等\n");
}
}
return 0;
}
运行,
3.总结
- 数组arr[i]只是形式上这么写,底层本质上是*(arr+i);
- 字符串之间的比较本质上会转换成字符之间的比较
- 字符之间的比较本质是字符对应的ASC码(ASSCII)的比较