王鹿其 发表于 2023-11-8 20:16:14

这段代码的错误在哪里

#include<iostream>
#include<string>
using namespace std;
int strcmp(string*arr)
{
        if(arr=arr)
        return 0;
        if(arr<arr)
        return -1;
        if(arr>arr)
        return 1;
}
int main()
{
        string*arr;
        for(int i=0;i<2;i++)
        {
                cin>>arr;
        }
        strcmp(arr);
       
       
        return 0;
}

isdkz 发表于 2023-11-8 20:16:56

这段代码有几个错误:

1. 在声明和定义 strcmp 函数时,参数类型应该是 string* arr 而不是 string*arr 。正确的声明应该是 int strcmp(string* arr) 。

2. 在 strcmp 函数中,比较字符串相等的语句应该使用 == 而不是 = 。因此, if(arr=arr) 应该改为 if(arr==arr) 。

3. 在 strcmp 函数中,比较字符串大小的语句应该使用 < 和 > 而不是 < 和 > 。因此, if(arr<arr) 和 if(arr>arr) 应该分别改为 if(*arr<*arr) 和 if(*arr>*arr) 。

4. 在 main 函数中,应该使用 new 关键字为 arr 数组中的每个元素分配内存,以便存储输入的字符串。可以使用 arr[ i] = new string; 来分配内存。

5. 在 main 函数结束前,应该使用 delete 关键字释放为 arr 数组分配的内存,以避免内存泄漏。可以使用 delete arr[ i]; 来释放内存。

下面是修改后的代码:

#include<iostream>
#include<string>
using namespace std;

int strcmp(string* arr)
{
    if(*arr == *arr)
      return 0;
    if(*arr < *arr)
      return -1;
    if(*arr > *arr)
      return 1;
}

int main()
{
    string* arr;
    for(int i=0; i<2; i++)
    {
      arr[ i] = new string;
      cin >> *arr[ i];
    }
    int result = strcmp(arr);
   
    // 释放内存
    for(int i=0; i<2; i++)
    {
      delete arr[ i];
    }
   
    return 0;
}


这样,代码就可以正确地比较输入的两个字符串并返回结果了。
页: [1]
查看完整版本: 这段代码的错误在哪里