编写算法实现字符串str1和str2的比较操作,要求比较结果包括相等和不相等两种情况
题目分析:
题目结果要求给出相同和不相同两种答案,字符串相同?在java内,str1 == str2为true的条件是,str1、str2必须是同一地址的字符串,也就是说他们是同身不同名成立,而如果地址不一样,即便字符串长得一模一样,str1 == str2还是不会成立的,此时str1.equals(str2)会成立。但是在C语言里面没有String这个说法,只有字符数组来顶替字符串String,所以要看两个字符串是否相等,是比较两个字符串的字典序:
从前到后挨个比较,如果两个字符一样,那么继续比较下一个字符,如果不一样,那么字典序大的那一个字符所在的字符串大一些
如果str1 > str2,返回1
如果str1 < str2,返回-1
如果str1 = str2,返回0
在这里说明一下C、java中字符串比较容易出的bug
C:strcmp(char str1[],char str2[])->比较的是两字符串的字典序大小
java:等于等于号“==”->比较的是两字符串的地址是否相同,即是不是同一个字符串
java:str1.equals(str2),比较的不是ascll码,只要str1和str2长得一模一样就成立,和地址没有关系,即不管是不是同一个字符串,只要长得一样就行
考点:
太简单,没有考点。。。。。。
代码实现:
#include<stdio.h>
#include<stdlib.h>
/*字符串比较函数,相同返1,否则返0*/
int strcompare(char str1[], char str2[])
{
int size1 = 0, size2 = 0; //用来累计字符ascll码之和
for (int i = 0; str1[i] != '\0'; i++)
size1 += (int)str1[i]; //加上字符的(int)即ascll码
for (int i = 0; str2[i] != '\0'; i++)
size2 += (int)str2[i];
if (size1 == size2) //字符串大小一样
return 1;
else
return 0;
}
int main()
{
char str1[] = "aseff";
char str2[] = "assff";
char str3[] = "aesff";
if (strcompare(str1, str2)) //比较str1和str2
printf("%s和%s相同!\n",str1,str2);
else
printf("%s和%s不相同!\n", str1, str2);
if (strcompare(str1, str3))
printf("%s和%s相同!\n", str1, str3);
else
printf("%s和%s不相同!\n", str1, str3);
system("pause");
return 0;
}
运行结果:
代码编译器:Dev C++
ok,再见