编写算法实现字符串str1和str2的比较操作,要求比较结果包括相等和不相等两种情况

编写算法实现字符串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
#include
/*字符串比较函数,相同返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;
}

运行结果:


编写算法实现字符串str1和str2的比较操作,要求比较结果包括相等和不相等两种情况_第1张图片



代码编译器:Dev C++
ok,再见

你可能感兴趣的:(数据结构)