2015-01-05 3 views
-1

C의 동적 문자 배열에서 선행 공백을 제거해야합니다. 응용 프로그램이 거의 작동하지만 처음에는 공백이 하나만 남습니다. 주어진 텍스트에서 모든 선행 공백을 제거하는 방법? 나는 string.h에서 기능을 사용해서는 안됩니다. Heres 내 코드 :동적 문자 배열에서 선행 공백을 제거하는 방법은 무엇입니까?

#include <stdio.h> 
#include <stdlib.h> 

int mystrlen(char *tab) 
{ 
    int i = 0; 
    while(tab[i] != '\0') 
    { 
     i++; 
    } 
    return i; 
} 

char* ex6(char *tab) 
{ 
    int spaces = 0, i, j = 0, s = 0; 
    for(i=0; tab[i] != '\0'; i++) 
    { 
     if (tab[i] == ' ') 
      spaces ++; 
     else 
      break; 
    } 

    spaces -= 1; 

    char *w = (char*) malloc (sizeof(char) * (mystrlen(tab) - spaces + 1)); 
    for(i=0; tab[i] != '\0'; i++) 
    { 
     if (tab[i] == ' ') 
     { 
      ++ s; 
     } 
     if(s > spaces) 
     { 
      w[j] = tab[i]; 
      j ++; 
     } 
    } 
    w[j] = 0; 
    return w; 
} 

int main() 
{ 
    char txt[] = "  Hello World"; 

    char *w = ex6(txt); 
    printf("%s\n", w); 

    free(w); 
    w = NULL; 

    return 0; 
} 
+2

그들을 계산하고'memmove'를 사용하십시오. –

+0

@iharob :하지만'string.h'의 함수를 사용해서는 안됩니다 –

+2

[malloc의 결과를 C로 캐스팅하지 마십시오] (http://stackoverflow.com/questions/605845/do-i-cast-the- malloc 결과). –

답변

2

문제는 spaces -= 1 라인에 있습니다. 1 칸 남았습니다.

+1

내가 이것을 지웠을 때, 나는 단지'World'라는 단어를 가지고있다. –

1

포인터 연산을 사용하여 tab 포인터를 앞으로 이동시킨 다음 문자열의 나머지 문자를 계산 한 다음 새 문자열에 대한 공간을 할당하고 각 문자를 새로운 할당 된 공간에 복사 할 수 있습니다.

이 문자열을 수정 strings.h

char* ex6(char *tab) 
{ 
    int i; 
    char *w; 
    while ((*tab == ' ') && (*tab != '\0')) 
     tab++; 
    w = malloc(mystrlen(tab) + 1); 
    i = 0; 
    while (*tab != '\0') 
     w[i++] = *tab++; 
    w[i] = '\0'; 
    return w; 
} 
+0

'memmove'와'strdup' 둘 다 OP에서 사용할 수없는'string.h'에있다. –

+0

@FrerichRaabe 알아요.하지만 그는 코드에서'strlen'을 사용했고'string.h '가 금지되었다는 것을 언급하지 않았습니다. –

3

없이 그것을 수행하는 방법입니다 현재 위치에서이 결과 문자열의 길이를 계산할 필요가 없기 때문에 상당히 컴팩트 한 방식으로 선행 공백을 제거 할 수 있습니다 :

/* No includes needed for ltrim. */ 

void ltrim(char *s) 
{ 
    const char *t = s; 
    while (*t && *t == ' ') 
     ++t; 

    while ((*s++ = *t++)) 
     ; 
} 

#include <stdio.h> 

int main() 
{ 
    char txt[] = "  Hello World"; 

    ltrim(txt); 
    printf("%s\n", txt); 

    return 0; 
} 
관련 문제