1

こんにちは、私は答えを探してみましたが、見つかりませんでした。(使用方法はわかりました)しかし、問題は、コードが機能しない理由がわからないということです。これが私のコードです:

#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;
}

intが言う限り文字列を返す必要があるため、おそらくプログラムは文字列と整数を受け取る必要があります。たとえば、("Laptop",4) は "Lapt" を返す必要があります。int が単語より大きい場合は、単語全体を返す必要があります。

問題は、プログラムが単語全体を返すべきではないときに返すことです。ですから、問題はそれが私の機能に入っていないことだと思います。私が間違っている場合は修正してください。

4

1 に答える 1

5
if(palabra.length() > carac)

渡した整数よりも長い場合は、元の文字列を返すように指示しています。それを逆にしたい場合:

if(palabra.length() <= carac)

さらに良いことに、同じことを繰り返したり、パラメーターの不要なコピーを作成したりする必要はありません。これは、既に元のコピーです。

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

return palabra;

または、substr関数を利用することもできますが、不要な部分文字列を使用したくない場合は、微調整できます。

return palabra.substr(0, carac);

これを行うと、文字列のコピーはもう必要ありません。

string acorta(const string &palabra, int carac)
于 2013-06-18T04:36:00.780 に答える