可以输出,但输出错误

img


各位朋友,请帮我看一下,上面这道例题,我的代码如下:

#include<bits/stdc++.h>
using namespace std;
string copy(string ch1, string ch2)
{
    int length = ch1.length();
    for(int i = 0; i < length; i++)
    {
        ch2[i] = ch1[i];
    }
    return ch2;
}
int main()
{
    string ch;
    int max_length = -0x7fffffff;
    string max_ch; 
    while(cin >> ch)
    {
        if(ch.length() > max_length)
        {
            max_length = ch.length();
            copy(ch, max_ch);
        }
        else
        {
            continue;
        }
    }
    cout << max_length << endl << max_ch;
    return 0;
}

我这个代码可以正常运行,但是输出错误,请帮我看一下,谢谢

max length 一开始可以赋值为 0
copy 函数可以简化,

string copy(string ch1, string& ch2)
{
    ch2 = ch1;
    return ch2;
}

甚至都可以删除,直接用 max_ch = ch

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
///////////////////////////////////////////////头文件
    int L = 0;
    vector<string> vec;
    string line_0, token_0;
    getline(cin >> ws, line_0);
    stringstream tokens_0(line_0);
    while (getline(tokens_0, token_0, ' ')) {
        vec.push_back(token_0);
    }
    for (int i = 0; i < vec.size(); i++)
    {
        if (vec[i].length() > L)
        {
            token_0 = vec[i]; L = vec[i].length();
        }
    }
    cout << L << endl << token_0;

【以下回答由 GPT 生成】

问题出在函数 copy() 中。在这个函数中,你试图将字符串 ch1 的内容复制到字符串 ch2 中,但这种复制方式是错误的。原因是,当传递 ch2copy() 函数时,它只是将指针传递给了函数,而不是字符串的实际副本。因此,对 ch2 的修改实际上是在修改原始字符串,而这是不正确的。

要解决这个问题,可以考虑使用引用(reference)传递字符串参数,这样就可以直接对其内容进行修改。以下是修改后的代码:

#include<bits/stdc++.h>
using namespace std;

void copy(string ch1, string& ch2)
{
    ch2 = ch1;
}

int main()
{
    string ch;
    int max_length = -0x7fffffff;
    string max_ch; 

    while(cin >> ch)
    {
        if(ch.length() > max_length)
        {
            max_length = ch.length();
            copy(ch, max_ch);
        }
    }

    cout << max_length << endl << max_ch;

    return 0;
}

在修改后的代码中,我更改了 copy() 函数的签名,使用 string& ch2 作为参数,表示传递一个字符串的引用。在函数内部,直接对 ch2 进行赋值操作,这样就修改了 max_ch 的内容。这样,就可以正确输出最长字符串的长度和内容。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

输入结束后后,再判断一次(在循环外面),是否超出曾经的字长就可以了

#include<bits/stdc++.h>
using namespace std;
string copy(string ch1, string ch2)
{
    int length = ch1.length();
    for(int i = 0; i < length; i++)
    {
        ch2[i] = ch1[i];
    }
    return ch2;
}
int main()
{
    string ch;
    int max_length = -0x7fffffff;
    string max_ch; 
    while(cin >> ch)
    {
        if(ch.length() > max_length)
        {
            max_length = ch.length();
            copy(ch, max_ch);
        }
        else
        {
            continue;
        }
    }
  if(ch.length() > max_length)
        {
            max_length = ch.length();
            copy(ch, max_ch);
        }
    cout << max_length << endl << max_ch;
    return 0;
}