2013-06-18 2 views
1

안녕하세요 모두들 잘 대답을 찾으려고했지만 찾지 못했습니다. (나는 그것을 사용하는 방법을 찾았지만) 것은 단지 내가 왜 내 코드가 작동하지 않는지 모르겠다. 그만큼 INT가 말한대로 문자열을 반환해야하기 때문에 문자열에 크기 조정 사용

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

string acorta(string palabra, int carac) 
{ 
    string acortado; 

    acortado=palabra; 
    if(palabra.length() > carac) 
    { 
     return acortado; 
    } 
    else 
    { 
     acortado.resize(carac); 
     return acortado; 
    } 
} 

int main(int argc, char** argv) { 

    cout<< acorta("Univesidad",5)<<endl; // here it should show "Unive" 
    cout<< acorta("Secretariado",10)<<endl; //here it should show "Secretaria" 
    cout<< acorta("Estudio",11)<<endl; //here it should show "Estudio" since th number    is long than the word 

    return 0; 
} 

잘 기발한 프로그램이 문자열과 정수를 받아야한다 : 여기 내 코드입니다. 예를 들어 ("Laptop", 4) "Lapt"를 반환해야합니다. int가 단어보다 크면 전체 단어를 반환해야합니다.

문제는 프로그램이 모든 단어를 반환하지 않아야한다는 것입니다. 그래서 문제는 그것이 내 기능에 들어 가지 않는다는 것입니다. 내가 틀렸다면 나를 바로 잡아주세요. . 자신을 반복하지 않는, 그러나 더 나은

if(palabra.length() <= carac) 

없고 : 당신은 당신이 전달 정수 이상이라면 원래의 문자열을 반환 할 말있어

+0

안녕하세요. 당신은 그것을 고치기 위해 무엇을 시도 했습니까? 어떻게 깨졌습니까? –

+1

@chris 감사합니다. 커다란 공헌을했고, 나는 그 부주의하고 지나친 실수를 보지 못했다고 믿을 수 없습니다. 나는 그것에 대해 노력하고있다 (나는 프로그래밍 할 때 새로운). 다시 한번 감사드립니다. – Gustavo

+0

@TarynEast if (palabra.length> carac) 부분을 제외한 모든 부분을 이동하려고했습니다. 나는 왜 내가 그 부분에 대해 생각하지 않았는지 모르겠다. 나는 그것을 당연하게 생각했다. – Gustavo

답변

5
if(palabra.length() > carac) 

당신은 그것을 반전 할

if(palabra.length() > carac) 
{ 
    palabra.resize(carac); 
} 

return palabra; 

아니면 불필요한들하지 않으려면하지만, 당신의 substr 기능을 활용할 수있다 : 이미 원본의 사본 인 매개 변수의 불필요한 복사에 필요한 ubstrings, 당신은 그것을 조정할 수 있습니다 : 당신이 그렇게한다면

return palabra.substr(0, carac); 

, 당신도 더 이상 문자열의 사본이 필요하지 않습니다

string acorta(const string &palabra, int carac) 
관련 문제