2011-04-18 7 views
0

가능한 중복 :
Remove characters from a string in CC에서 문자열에서 문자를 제거

내가 C의 작은 잭 응용 프로그램을 만드는거야 그리고 나는 space에서 다음 *을 제거하고 싶습니다 문자열 내가 각 줄을 반복 한 다음 lineNumber이 함수에 전달 된 것이면 그 줄에서 문자를 제거하는 방법을 궁금해 할 것입니다. Heres에서 줄을 반복하는 코드

,
while (fgets(line, sizeof line, oldTodoFile)) { 
     len = strlen(line); 
     if (len && (line[len - 1] != '\n')) {} else { 
      lineNumber++; 
      if (lineNumber == todoNumber) { 
       // remove *[space] 
      } else { 
       fprintf(todoFile); 
      } 
     } 
+0

왜 텍스트 처리 응용 프로그램을위한 C입니까? –

+0

귀하의 문구에 정확히 어디에 문제가 있습니까? – RedX

+0

질문을 명확히하기 위해 업데이트했습니다. C를 배우려고하기 때문에 C를 사용하고 있습니다. – errorhandler

답변

3

은 문자열의을 시작하는 에서 선도적 인 '* '를 제거하는 방법을 묻는 것 같은 소리.

  • 당신은 하나 단지 각 문자를 이동할 수있는 두 개의 공간 다시, 뭔가 같은 :

    if(startsWithStarSpace) { 
        int i; 
        for(i = 2; i < len; ++i) 
        str[i-2] = str[i]; 
        str[i] = '\0'; 
    } 
    
  • 아니면 문자열을 동적으로 할당되는 경우, 당신은 단지 앞으로 포인터를 이동할 수있는 두 가지 옵션이 있습니다 2 문자 (이전 포인터를 나중에 free()에 저장해야합니다).

0

이 작업을 수행 할 수있는 간단한 방법이 될 것이다 (내가이 표준 기능의 많은이 있는지 해요, 난이 가장 좋은 방법은 아니라는 것을 알고주의) :

if(lineNumber == todoNumber) { 
char buff[len]; 
char* bptr = buff; 
char* lptr = line; 
for(;lptr!=NULL;) { 
    if(*lptr!='*') 
    *bptr++ = *lptr++ 
    else{ 
    lptr++;lptr++; /*skip over * and space */ 
    } 
} 
strcpy(line,buff); /* replace line with updated version */ 
} 

말했듯 , 최선의 해결책이 아니라 그것의 한 가지 방법입니다.

관련 문제