不使用strcmp比较两个字符串

时间:2015-03-29 02:42:24

标签: c++

这是我的问题: 写一个函数名compareStrings(char * str1, char * str1, int i=0),它返回决定是否 两个收到的字符串是否相等。第三个参数决定是否采取案例 比较字符串时的敏感性:0表示区分大小写,否则区分大小写。

  • 如果两个字符串相等,则函数返回0
  • 如果str1>则返回1 STR2
  • 如果str1<
  • 返回-1 STR2。

示例:

  • compareStrings( “apple”, “Apple” )返回1
  • compareStrings( “apple a day keeps the doctor away”, “apple are good for health” )返回-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;
    }
}

1 个答案:

答案 0 :(得分:3)

如图所示,代码存在多个问题。我忽略了你没有使用C ++ std::string类型的事实,尽管这是另一个问题。

  1. 您只比较字符串的前20个字符。
    • 如果字符串更长会发生什么?
    • 如果循环结束,函数的返回值是多少?
  2. 即使字符串较短,也要比较字符串的前20个字符。
  3. 您在第一个匹配相同的字符时返回0。
  4. 如果第一个字符串中的当前字符为大写,而第二个字符串中的当前字符为小写,则返回-1,无论是否设置了区分大小写标志或字母是否相等。
  5. 同样,您为逆转条件返回+1。
  6. 您不能使用isalpha()isupper()islower()宏(前缀为std:: <cctype>或等效函数。
  7. 如果一个字符串包含7而另一个字符串包含9,则您不会认识到,您应该做出决定。
  8. 由于比较函数不应该修改任何一个字符串,因此函数原型应该使用const char *个参数。
  9. 您需要仔细重新考虑您的代码。忽略不区分大小写,直到区分大小写的比较正常工作。然后你可以修改它来处理不区分大小写的比较。