2013-07-11 2 views
-3

내 자신의 strlen 및 substr 함수를 만들려고하는데 문제가 1 개 있습니다.
예를 들어, 문자열 ABC가 있다고 가정 해 봅시다. 내 strlen은 3을 반환하고, 0에서 1로이 문자열을 자르고 싶다고 말하면 나에게 반환해야하지만 substr을 삽입하면 일부 쓰레기 값이 생깁니다. 새로운 문자와 길이를 확인 내가받을 것이다 (14)
이 내 코드입니다 :
내 자신의 strlen 및 하위 문자열 함수 만들기

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

내가, 감사합니다 내가 뭘 잘못했는지 몇 가지 의견을 좀하고 싶습니다!

+3

디버깅을 시도 했습니까? –

+0

끝에 '\ 0'을 써야합니다. 그리고 그 공간도 충분해야합니다. – BoBTFish

+0

사용 후 문자 배열을'[]'삭제해야합니다. – urzeit

답변

1

for(i = 0, j = s ; j < e && w[j] != '\0'; i++, j++)에 대한 조건 루프를 변경하고 문자열 끝에 \ 0을 추가해야하므로 크기 +1을 할당해야합니다.

1

하위 문자열은 '\ 0'으로 끝나야하며, 배열 크기는 하나를 추가해야합니다. 코드는 다음과 같습니다.

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