strcmp函数比较顺序等用法

函数原型:

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

比较用法:
当s1<s2时,返回为负数;
当s1==s2时,返回值= 0;
当s1>s2时,返回正数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。

比较输入字符串顺序用法:

int main()
{
	using namespace std;
    int n= 0;
	char input[80];

	cout << "Enter words (to stop, type the word done):" << endl;
	while (cin >> input)
	{
		if (strcmp(input, "done"))       //比较输入字符串与"done"字符串的位置顺序。
		{
			n++;
		}
		else
			break;
	}
	cout << "You entered a total of " << n << " words." << endl;
	}

当输入 a b c d e f g done for sure 时
程序结果为:
You entered a total of 7 words.

### strcmp 函数的返回值及其意义 `strcmp` 是 C 语言标准库 `<string.h>` 中的一个函数,其主要作用是比较两个字符串的内容并返回它们的关系。它的函数原型定义为: ```c int strcmp(const char *str1, const char *str2); ``` #### 返回值的意义 - 如果 `str1` 和 `str2` 完全相等,则返回 **0**[^1]。 - 如果 `str1` 小于 `str2`(基于 ASCII 值逐字符比较),则返回一个小于零的负整数值[^3]。 - 如果 `str1` 大于 `str2`,则返回一个大于零的正整数值。 这种比较方式遵循字典顺序原则,即从左至右逐一比较对应位置上的字符ASCII码值,直到发现不匹配的字符或遇到字符串终止符 `\0`。 --- ### 使用示例 以下是几个典型的例子来展示 `strcmp` 的实际应用效果: ```c #include <stdio.h> #include <string.h> int main(void) { char *a = "English"; char *b = "ENGLISH"; char *c = "english"; printf("strcmp(a, b): %d\n", strcmp(a, b)); // 输出非零值,因为 'E' 和 'e' 不同 printf("strcmp(a, c): %d\n", strcmp(a, c)); // 输出正值,因大写字母优先级低于小写 printf("strcmp(\"abc\", \"abcd\"): %d\n", strcmp("abc", "abcd")); // 输出 -1,因第一个更短 return 0; } ``` 上述代码展示了不同情况下 `strcmp` 的行为特点[^2]。 --- ### 自定义实现 `strcmp` 功能 为了更好地理解内部机制,可以尝试手动编写一个类似的函数。下面是一个简单的自定义版本: ```c int custom_strcmp(const char *s1, const char *s2) { while (*s1 && (*s1 == *s2)) { // 当两者当前字符相同且未到达结尾时继续循环 s1++; s2++; } return *(unsigned char *)s1 - *(unsigned char *)s2; // 计算差异 } // 测试代码 int main() { char *ch1 = "hello"; char *ch2 = "HELLO"; printf("custom_strcmp result: %d\n", custom_strcmp(ch1, ch2)); return 0; } ``` 此方法通过逐步遍历两字符串直至找到首个不同的字符或任一字符串结束标志位来进行判断[^4]。 --- ### 注意事项 需要注意的是,在调用 `strcmp` 进行比较之前应确保传入的有效指针指向合法内存区域内的 NULL 终止字符串;否则可能导致不可预期的行为甚至程序崩溃。 另外值得注意的一点在于大小写的敏感度——即使仅存在字母大小写区别也会被视作完全不一样的两条记录处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值