对比字符串

字符串比较方法:使用strcmp实现
该博客介绍了如何在C语言中使用strcmp函数来比较两个字符串是否相等。通过示例代码展示了当输入的密码与预设的123456匹配时,程序会输出输入正确,否则提示输入错误。这强调了在编程中正确比较字符串的重要性,以及避免直接使用等号进行字符串比较的错误做法。

假设,我们要对比两个字符串是否相同,那该怎么对比呢?

if (arr1 == "123456" ) ?

判断两个字符串是否相等,不能使用等号判断

应该使用strcmp(string compare  字符串比较)

我们来用实际代码演示 一下。

#include<stdio.h>
#include<string.h>            //strcmp必备头文件
int main()
{
	int a = 0;
	char password[20] = "";   //这里一定要给[]内设置大小,否则因为只初始化了\0 导致数组大小为1 
	while (1)
	{
	scanf("%s", password);    //因为password本身是个数组名,数组名本身就是个指针,所以不用加 &
		if (strcmp(password, "123456") == 0)
		{                     //strcmp中   如果两个字符串相同,则返回值为0。
			printf("输入正确\n");
			break;
		}
		printf("输入错误\n");
	}
	return 0;
}

在C语言中,字符串比较和子字符串的查找是两个常见的操作,分别通过标准库函数 `strcmp` 和 `strstr` 实现。 ### 字符串比较 `strcmp` 函数用于比较两个字符串是否相等。它会从两个字符串的首字符开始,依次比较对应位置的字符,直到遇到不同的字符或到达字符串末尾(即遇到 `'\0'`)。该函数返回值如下: - 如果两个字符串相等,则返回 0。 - 如果第一个字符串大于第二个字符串,则返回正整数值。 - 如果第一个字符串小于第二个字符串,则返回负整数值。 函数原型为: ```c int strcmp(const char *s1, const char *s2); ``` 其实现逻辑如下: ```c int strcmp(const char *str1, const char *str2) { while (*str1 != '\0' && *str2 != '\0' && *str1 == *str2) { str1++; str2++; } return (*str1 - *str2); } ``` ### 子字符串查找 若要查找一个字符串是否包含另一个子字符串,可以使用 `strstr` 函数。该函数返回指向主字符串中第一次出现子字符串的位置的指针;如果未找到子字符串,则返回 `NULL`。 函数原型为: ```c char *strstr(const char *haystack, const char *needle); ``` 例如,若要查找子字符串 `"hello"` 是否存在于主字符串 `"Hello, hello world!"` 中,可以使用以下代码: ```c #include <stdio.h> #include <string.h> int main() { const char *mainStr = "Hello, hello world!"; const char *subStr = "hello"; char *result = strstr(mainStr, subStr); if (result != NULL) { printf("子字符串 \"%s\" 在主字符串中出现的位置: %s\n", subStr, result); } else { printf("子字符串 \"%s\" 未在主字符串中找到。\n", subStr); } return 0; } ``` 上述代码中,`strstr` 用于查找子字符串 `"hello"` 在主字符串 `"Hello, hello world!"` 中的首次出现位置,并根据结果输出相应的信息。 ### 字符串比较并返回子字符串 如果需要在比较字符串的同时返回子字符串,可以通过组合 `strcmp` 和 `strstr` 来实现。例如,先使用 `strstr` 查找子字符串,如果找到,则使用 `strncmp` 或 `strcmp` 比较特定长度的字符串内容。 以下是一个示例代码,展示如何在查找子字符串后比较其内容: ```c #include <stdio.h> #include <string.h> int main() { const char *mainStr = "Hello, hello world!"; const char *subStr = "hello"; char *result = strstr(mainStr, subStr); if (result != NULL) { // 比较找到的子字符串与目标字符串是否完全相同 if (strncmp(result, subStr, strlen(subStr)) == 0) { printf("找到子字符串 \"%s\" 并且内容匹配。\n", subStr); } else { printf("找到子字符串 \"%.*s\" 但内容不匹配。\n", (int)strlen(subStr), result); } } else { printf("未找到子字符串 \"%s\"。\n", subStr); } return 0; } ``` 在上述代码中,`strstr` 用于查找子字符串,`strncmp` 用于比较找到的子字符串与目标字符串是否一致。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值