C++ 在不使用strcmp的情况下比较两个字符串

C++ 在不使用strcmp的情况下比较两个字符串,c++,C++,这是我的问题: 写一个函数名compareStringschar*str1,char*str1,int i=0,返回值决定 接收到的两个字符串是否相等。第三个参数决定是否采用case 比较字符串时的敏感度:0表示区分大小写,否则区分大小写 如果两个字符串相等,则函数返回0 如果str1>str2,则返回1 如果str1

这是我的问题: 写一个函数名compareStringschar*str1,char*str1,int i=0,返回值决定 接收到的两个字符串是否相等。第三个参数决定是否采用case 比较字符串时的敏感度:0表示区分大小写,否则区分大小写

如果两个字符串相等,则函数返回0 如果str1>str2,则返回1 如果str1 比较“苹果”,“苹果”返回1 与“每天吃苹果远离医生”、“苹果有益健康”相比,结果是-1 这段代码我已经完成了,但它不是比较所有的Ascii。据我说,我必须把所有的Ascii的检查,但它会这么长 请告诉我关于这个问题的其他逻辑

#include<iostream>
using namespace std;
int compareStrings(char * str1, char * str2);
int main()
{
    char str1[]="apple";
    char str2[]="Apple";
    int ret;
    ret=compareStrings(str1,str2);
    if(ret==0)
        cout<<"Both strings are equal"<<endl;
    else if(ret==1)
        cout<<"string 1 is bigger than 2"<<endl;
    else
        cout<<"string 1 is lower than 2"<<endl;
    return 0;
}

int compareStrings(char * str1, char * str2)
{
    for(int i=0;i<20;i++)
    {
        if(str1[i]==str2[i])
            return 0;
        else if(str1[i] >= 'A' && str1[i] <= 'Z' &&str2[i] <='a' && str2[i]<='z')
            return -1;
        else if(str2[i] >= 'A' && str2[i] <= 'Z' &&str1[i] <='a' && str1[i]<='z')
            return 1;
    }
}

如图所示,代码存在多个问题。我忽略了你不使用C++ STD::string类型的事实,尽管这是另一个问题。 只比较字符串的前二十个字符。 如果字符串较长,会发生什么情况? 如果循环结束,函数的返回值是多少? 您可以比较字符串的前二十个字符,即使字符串较短。 在相同的第一个字符上返回0。 如果第一个字符串中的当前字符是大写,而第二个字符串中的当前字符是小写,则返回-1,而不管是否设置了区分大小写标志或字母是否相等。 同样,对于相反的条件,返回+1。 您不使用前缀为std::from或等效函数的isalpha、isupper、islower宏。 您没有意识到,如果一个字符串包含7,另一个字符串包含9,您应该做出决定。 因为比较函数不应该修改任何一个字符串,所以函数原型应该使用const char*参数。 等等


您需要相当仔细地重新思考代码。忽略不区分大小写,直到区分大小写的比较正常工作。然后可以修改它以处理不区分大小写的比较。

如果第一个字符相等,则返回0,而不检查字符串的其余部分。您可能不应该硬编码与20个字符的比较,因为两个字符串都不是20个字符长。您希望首先获得长度。您的示例是不好的做法,因为您使用char*指向字符串文字,而不是const char*include使用namespace std;int getLenchars;int main{int len;char s[]=我们是穆斯林;len=getLens;coutYou实际上不需要在比较字符串之前检索字符串长度。这只是浪费了开销。只需开始循环,根据需要比较每个字符。当检测到差异时,相应地返回-1/1。当其中一个字符串到达其空终止符时,检查另一个字符串是否也为r同时使用它的空终止符,如果是,则返回0,否则相应地返回-1/1。我假设这是一个学校作业。遗憾的是,他们不允许您使用std::string,只是不允许使用它的运算符==和一些其他方便的位进行练习。然后您可以获得std::string的附带好处,但仍然是c这个练习的挑战。我必须在没有cctype的情况下完成library@tayyibahalauddin:您好;注释中的代码不可读。使用*字符表示斜体等。在代码周围使用反引号,但最好使用代码和辅助问题更新问题-无论是什么。请删除您的注释-她在问题下方-并用您打算添加/询问的内容更新问题。@tayyibahalauddin:如果您必须在没有标题的情况下工作,那么请在问题中说明这是标题,而不是库。重要的是,我们要知道所有的小限制,以便我们不会违反您应该遵守的规则。您可以假设什么关于你正在使用的代码集?是不是EBCDIC WHCH在字母表中间编码了非字母字符?它是纯7位ASCII,所以我们不必担心重音字母字符,大写字母和小写字母之间有简单的转换吗?这些东西很重要。对这个问题不要抱太大希望。