鱼C论坛

 找回密码
 立即注册
查看: 1285|回复: 1

这段代码的错误在哪里

[复制链接]
发表于 2023-11-8 20:16:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
#include<string>
using namespace std;
int strcmp(string*arr[2])
{
        if(arr[0]=arr[1])
        return 0;
        if(arr[0]<arr[1])
        return -1;
        if(arr[0]>arr[1])
        return 1;
}
int main()
{
        string*arr[2];
        for(int i=0;i<2;i++)
        {
                cin>>arr[i];
        }
        strcmp(arr);
       
       
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-8 20:16:56 | 显示全部楼层
这段代码有几个错误:

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

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

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

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[2])
{
    if(*arr[0] == *arr[1])
        return 0;
    if(*arr[0] < *arr[1])
        return -1;
    if(*arr[0] > *arr[1])
        return 1;
}

int main()
{
    string* arr[2];
    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;
}

这样,代码就可以正确地比较输入的两个字符串并返回结果了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 04:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表