#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
中,但这种复制方式是错误的。原因是,当传递 ch2
给 copy()
函数时,它只是将指针传递给了函数,而不是字符串的实际副本。因此,对 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;
}