-3

独自の strlen および substr 関数を作成しようとしていますが、1 つの問題があります。
たとえば、文字列 ABC があるとします。strlen は 3 を返します。この文字列を 0 から 1 に切り取りたいとすると、A に返されるはずですが、substr を a に挿入すると、ゴミの値がいくつか得られます。 new char を入力し、14 を受け取る長さを確認します。
これが私のコードです。

int len(char *w){
    int count=0;
    int i=0;
    while (w[i]!='\0')
    {
        count++;
        i++;
    }
    //cout<<"Length of word is:"<<count<<"\n";
    return count;

}

char *subs(char *w,int s,int e){
    int i,j;
    int size=0;size=(e-s);
    //cout<<"new size is:"<<size<<"\n";
    char *newW=new char[size];

    for(i=0,j=s;j<e;i++,j++)
    {
        newW[i]=w[j];  
    }

    return newW;

}

int main(){
    char* x="ABC";
    //int v=len(x);
    //cout<<v;
    char *n=subs(x,0,1);
    cout << len(n);
    for(int g=0;g<len(n);g++)
    //cout<<n[g];

    return 0;
}

私が間違っていたことについてコメントをもらいたいです、ありがとう!

4

2 に答える 2

1

サブ文字列は '\0' で終わる必要があり、配列サイズは 1 を追加する必要があります。コードは次のとおりです。

char *subs(char *w,int s,int e){
    int i,j;
    int size=0;size=(e-s);
    //cout<<"new size is:"<<size<<"\n";
    char *newW=new char[size + 1];

    for(i=0,j=s;j<e;i++,j++)
    {
        newW[i]=w[j];  
    }
    newW[i] = '\0';

    return newW;
}
于 2013-07-11T14:42:13.387 に答える