2013-08-31 1 views
0

다음 코드에서는 다이어트 계획에 따라 어떤 저녁 식사를 먹어야하는지 알아 보았습니다. 나는식이 요법, 점심 식사, 아침 식사를 입력으로 통과시키고 저녁 식사를 결과물로 돌려 보내야한다. 다이어트에는 내가 오늘 먹어야하는 것이 들어 있습니다. 각 편지는 음식입니다. 아침과 점심에는 내가 이미 먹은 음식이 들어 있습니다.string을 main 함수로 반환 할 수 없습니까?

는 아침이나 점심 다이어트에 존재하지 않는 모든 요소를 ​​포함하는 경우에, 나는 "사기"를 반환해야합니다. 그렇지 않으면 나는 다이어트에 있지만 아침과 점심에는없는 요소를 찾아야합니다.

내 코드는 Dinner가 성공적으로 계산되었음을 보여줍니다. 그러나 그것은 저녁 식사를 반환하지 않습니다.

#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: 

저녁 식사 아무것도 표시되지 않습니다. 진심으로 감사드립니다.

+5

문자열을 처리 할 때'\ 0' 물건을 직접 다루어서는 안됩니다. – Borgleader

+1

문자열 연산이 언제 그렇게 복잡해 집니까? – billz

답변

2

를 ++ 어쩌면 당신이 그것을 혼합 한 것을 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를 사용하지 마십시오.

1

그것은 당신이 dinner[i] 같은 요소를 참조하는 경우 문자열이 자동으로 증가 할 것으로 예상처럼 보인다. 그렇지 않습니다. dinner을 선언하면 빈 문자열로 시작됩니다. 프로그램에서 dinner[i] = diet[k];을 실행하면 정의되지 않은 동작이 발생합니다.

는 문자열 push_back 멤버 함수를 사용하여 문자열의 끝에 문자를 추가합니다.

또한 문자열 끝 부분에 '\ 0'을 추가 할 필요가 없습니다.

+0

예 .. 효과가있었습니다. 고맙습니다. –

+0

저녁 [i] + = diet [k]도 효과가 있습니다. –

+0

@ user2734637, 그렇게해서는 안됩니다. 'dinner + = diet [k]'는해야한다. – dhavenith

0

나는 당신이 저녁 식사를 선언 할 수

dinner[i] = diet[k]; 

dinner.push_back(diet[k]); 

을 변경하고

dinner[i] = '\0'; 
0

으로 라인을 없애 필요가 있다고 생각과 같은 : 문자의 저녁 식사 [100] ;

다음 주 함수 getchar가()와 화면의 출력 숙박 할 수 INT의 반환 값에 :. 당신은 C에서 일부 오해 string

int main() 
{ 
    string diet = "ABCD"; 
    string bf = "AB", lu = "C"; 
    DietPlan d; 

    string din = d.chooseDinner(diet, bf, lu); 

    cout<<"Dinner: "<<din<<endl; 

    getchar(); 
    return 0; 
} 
관련 문제