gpt4 book ai didi

c++ - 无法将字符串返回给主函数?

转载 作者:行者123 更新时间:2023-11-28 00:41:45 25 4
gpt4 key购买 nike

在下面的代码中,我正在根据饮食计划查找我必须吃的晚餐。我通过饮食、午餐和早餐作为输入,必须将晚餐作为输出返回。饮食包含我今天应该吃的东西。每个字母都是一些食物。早餐和午餐包含我已经吃过的东西。

如果早餐或午餐含有饮食中不存在的任何元素,我应该返回“Cheater”。否则我必须找到饮食中存在但早餐和午餐中没有的元素。

我的代码显示晚餐已经计算成功。但它不返回晚餐。

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

class DietPlan
{
public:
string chooseDinner( string diet, string breakfast, string lunch )
{
int lim1 = breakfast.length(), lim2 = lunch.length();
int flag1 = 1, lim0 = diet.length();
//Sort diet.
for(int k = 1; k < lim0; k++)
for(int x=0;x < lim0-k; x++)
if( diet[x]>diet[x+1] )
{
char temp = diet[x];
diet[x] = diet[x+1];
diet[x+1]=temp;
}
cout<<"Diet: "<<diet<<endl;
//Sort breakfast.
if(lim1>0)
for(int k = 1; k < lim1; k++)
for(int x=0;x < lim1-k; x++)
if( breakfast[x]>breakfast[x+1] )
{
char temp1 = breakfast[x];
breakfast[x] = breakfast[x+1];
breakfast[x+1]=temp1;
}
cout<<"Breakfast: "<<breakfast<<endl;
//Sort lunch.
if(lim2>0)
for(int k = 1; k < lim2; k++)
for(int x=0;x < lim2-k; x++)
if( lunch[x]>lunch[x+1] )
{
char temp2 = lunch[x];
lunch[x] = lunch[x+1];
lunch[x+1]=temp2;
}
cout<<"Lunch: "<<lunch<<endl;
//compare breakfast and diet. as soon as there is a difference flag 0.

for( int l = 0; l < lim1; l++ )
{
for(int m = 0; m<lim0; m++ )
if( breakfast[l]!=diet[m] )
flag1 = 0;
else
{
flag1 = 1;
cout<<diet[m];
diet[m] = '0'; cout<<" ho "<<endl;
break;
}
if( flag1 == 0 )
{
cout<<"Hicheater"<<endl;
return "CHEATER";
}
}
cout<<"Diet: "<<diet<<endl;
//compare lunch and diet. as soon as there is a difference flag 0.

for( int l = 0; l < lim2; l++ )
{
for(int m = 0; m<lim0; m++ )
if( lunch[l]!=diet[m] )
flag1 = 0;
else
{
flag1 = 1;
diet[m] = '0';
break;
}
if( flag1 == 0 )
return "CHEATER";
}
cout<<"Diet: "<<diet<<endl;
string dinner;
int i = 0;
// put the remaining characters from diet in dinner.
for( int k = 0; k<lim0; k++ )
if( diet[k]!='0' ) {
cout<<diet[k];
dinner[i] = diet[k];
cout<<i<<" "<<dinner[i]<<endl;
i++;
}
cout<<i<<endl;
dinner[i]='\0';
cout<<"Dinner: "<<dinner<<endl;
return dinner;
}
};

int main()
{
string diet = "ABCD";
string bf = "AB", lu = "C";
DietPlan d;
string din = d.chooseDinner(diet, bf, lu);
cout<<"Dinner: "<<din<<endl;
}

输出:

    Diet: ABCD
Breakfast: AB
Lunch: C
A ho
B ho
Diet: 00CD
Diet: 000D
D0 D
1
Dinner:
Dinner:

晚餐没有显示任何内容。在此方面提供任何帮助,我将不胜感激。

最佳答案

你理解有误string在 C++ 中。也许你把它和 C 风格的字符串混淆了。在 C++ 中使用 string,你不需要设置像 '\0' 这样的东西,我们可能不关心库如何存储它。当你声明一个字符串时,它一开始是空的,所以你应该写dinner += diet[k]而不是dinner[i] = diet[k],字符串会自动放大。所以下面几行应该修改,然后它会起作用:

for( int k = 0; k<lim0; k++ )
if( diet[k]!='0' )
{
cout<<diet[k];
//dinner[i] = diet[k];
dinner += diet[k];
cout<<i<<" "<<dinner[i]<<endl;
i++;
}
cout<<i<<endl;
//dinner[i]='\0';

更多小技巧:字符串不要手工排序,使用STL算法sort .

关于c++ - 无法将字符串返回给主函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18543560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com