C++ 不带比较的字符串比较()

C++ 不带比较的字符串比较(),c++,C++,我目前正在做一项作业,要求我们创建自己的字符串比较库,而不使用compare()等 我让它工作,但在我的研究期间,我创建了一个bool函数,用于角色比较和返回值 它需要像compare()一样返回,其中0=字符串相等,0>或0

我目前正在做一项作业,要求我们创建自己的字符串比较库,而不使用compare()等

我让它工作,但在我的研究期间,我创建了一个bool函数,用于角色比较和返回值

它需要像compare()一样返回,其中0=字符串相等,0>或0<表示不相等,而不是像我当前设置的那样返回true或false

我试着将bool函数改为int,但现在当我运行正确返回字符串为equal的程序时,它显示为notequal

标题代码:

bool compare_char(char &c1, char &c2)
{
    if (c1 == c2)
        return true;
    else if (toupper(c1) == toupper(c2))
        return true;
    else
        return false;
}

bool insensitive_string_comparision(string &string_one, string &string_two)
{
    return ((string_one.size() ==  string_two.size()) &&
        equal(string_one.begin(), string_one.end(), string_two.begin(), &compare_char));
}

string remove_spaces(string string)  
{ 
    string.erase(remove(string.begin(), string.end(), ' '), string.end()); 
    return string; 
} 
string remove_punctuation(string string)
{
    for (size_t i = 0, len = string.size(); i < len; ++i)
    {
        if (ispunct(string[i]))
        {
            string.erase(i--, 1);
            len = string.size();
        }
    }
    return string;
bool比较字符(字符和c1,字符和c2)
{
如果(c1==c2)
返回true;
否则如果(toupper(c1)=toupper(c2))
返回true;
其他的
返回false;
}
布尔不敏感字符串比较(字符串和字符串一、字符串和字符串二)
{
返回((string_one.size()==string_two.size())&&
相等(string_one.begin()、string_one.end()、string_two.begin()、compare_char));
}
字符串删除_空格(字符串)
{ 
擦除(删除(string.begin()、string.end()、“”)、string.end());
返回字符串;
} 
字符串删除\u标点符号(字符串)
{
对于(size_t i=0,len=string.size();i
Int头更改

int compare_char(char &c1, char &c2)
{
    if (c1 == c2)
        return 0;
    else if (toupper(c1) == toupper(c2))
        return 0;
    else if (toupper(c1) > toupper(c2))
        return -1;
    else if (toupper(c1) < toupper(c2))
        return 1;
}

int insensitive_string_comparision(string &string_one, string &string_two)
{
    return ((string_one.size() ==  string_two.size()) &&
        equal(string_one.begin(), string_one.end(), string_two.begin(), &compare_char));
}
int比较字符(字符和c1,字符和c2)
{
如果(c1==c2)
返回0;
否则如果(toupper(c1)=toupper(c2))
返回0;
否则如果(toupper(c1)>toupper(c2))
返回-1;
否则如果(toupper(c1)
Int主要变化

int result = insensitive_string_comparision(string_one, string_two);

if (result == 0)                
   cout << "Both Strings are equal." << endl;
else (result == 1 || result == -1)
   cout << "Both Strings are not equal." << endl;
return 0;
int result=不敏感的字符串比较(字符串一,字符串二);
如果(结果==0)

cout在您的问题中,您不完全清楚如何比较字符串,但我根据您的示例代码做了一些假设。您可以通过编写
不敏感字符串比较来解决问题,如:

  int insensitive_string_comparision(string &string_one, string &string_two) {
    int len_one = string_one.length();
    int len_two = string_two.length();
    int len_comparison = 0;
    if (len_one > len_two) {
      len_comparison = -1;
    } else if (len_one < len_two) {
      len_comparison = 1;
    } 
    int minlen = (len_comparison == -1) ? len_one : len_two;

    for (int i = 0; i < minlen; i++) {
      int order = compare_char(string_one[i], string_two[i]);
      if (order != 0) {
        return order;
      }
    }

    return len_comparison;
  }
int不敏感的字符串比较(字符串和字符串一,字符串和字符串二){
int len_one=string_one.length();
int len_two=string_two.length();
int len_比较=0;
如果(一列>二列){
len_比较=-1;
}否则如果(一排<二排){
len_比较=1;
} 
int minlen=(len_比较==-1)?len_一:len_二;
对于(int i=0;i

我还建议您在编译器上打开警告。您不需要将一些返回语句放在else块中。

如果您需要-1、0、1类型的比较,那么从说明比较函数必须返回
true
false
的文档开始时,选择yes bool是个错误的选择。您不能使用
std::equal
。这不起作用。您必须自己实现整个词典比较算法。当您不需要更改值时,无需在
compare_char(char&c1,char&c2)
中传递引用。您测试过代码吗?比较字符串“xy”和“xyz”时,您的函数将返回什么?我将编辑我的原始帖子,以便在比较中包含标题的所有代码,但它完全是在比较字符串。因此abc=abc,abc=abc,但abcd3!=abcde。如果用户愿意,可以选择删除空格和标点符号。welp这很尴尬。希望它现在能修复