2014-09-16 3 views
2

초심자의 코스를 C에서 듣고 "머리말"주위로 머리를 감싸려고합니다. 이전에 Java로 프로그래밍 했으므로 다소 혼란 스럽습니다."문자열"을 C로 문자 분할하기

"문자"를 ""문자로 분리하여 특정 문자를 제거 할 수 있는지 궁금합니다. 나는 각 노드가 데이터 값을 가지고있는 링크 된리스트를위한 코드를 작성했다. 다음 포인터 (node_line은 라인을 유지함)를 호출했다.

typedef struct node { 
    char *data; 
    struct node *next; 
} node_line; 

이 문제없이 작동하고, 나는 전체 목록을 순회하고 각 요소에 인쇄 할 수 있습니다 : 그러나

void print_list(node_line head) { 
    node_line * current = head; 
    while(current != NULL) { 
      printf("%s\n", current->data); 
      current = current->next; 
    } 
} 

를, I는 전류 에서 "문자열을"변환에 문제가 있어요> 데이터 문자로. 즉, 한 번에 한 문자 씩 읽는 것입니다.

예를 들어, 모든 모음을 "문자열"에서 제거하는 프로그램을 작성하고 싶습니다. 필자는 getc() 함수를 사용하여 파일을 읽을 때이를 해결할 수있었습니다. 그러나, 나는 현재 -> 데이터의 텍스트로 그렇게 할 수 없습니다. 등

while ((c = getc(current->data) != NULL) { ... } 

어떤 도움, 조언, 매우 감사합니다 :

int c; 
    while((c = getc(f)) != EOF) { 
     //REMOVE 
     if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='y') { 
      printf(""); //Remove the vowel 
     } 
     else { 
      putchar(c); //Write out one character at the time. 
     } 
    } 

가 나는 같은 것을 상상할!

+1

가 확실 getc 그룹 (있습니까)는 * 문자에 ussed 할 수 있습니까? – hauron

+0

@hauron, NO :) 다른 사람들이 지적했듯이 getc()는 파일을 읽는 데 사용됩니다. :) – northerner

답변

4

getc파일에서 읽기위한 것입니다.

for (const char * p = current->data; *p != '\0'; ++p) 
{ 
    char c = *p; 
    if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='y') { 
     ... 
    } 
} 

을 아니면 포인터가 아닌 명시 적 배열 인덱싱을 선호하는 경우 : 당신이 일반적으로 같은 것을 할 것 char * 버퍼 (문자열)에 문자에 액세스하려면

const char * s = current->data; 
for (int i = 0; i < strlen(s); ++i) 
{ 
    char c = s[i]; 
    if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='y') { 
     ... 
    } 
} 
+1

고마워, 잘 설명! – northerner

1
void print_list(node_line head) { 

이 있어야 할

void print_list(node_line *head) { 

getc :

내부 파일 위치가 현재 가리키는 문자 지정된 스트림의 표시기를 반환합니다.

char *s = current->data; 

while (*s) { 
    if(*s=='a' || *s=='e' || *s=='i' || *s=='o' || *s=='u' || *s=='y') { 
     printf(""); //Remove the vowel 
    } 
    else { 
     putchar(*s); //Write out one character at the time. 
    } 
    s++; 
} 

이상 : 포인터 연산 사용, 당신이 원하는 게 아니에요

char *s = current->data; 

while (*s) { 
    if(*s!='a' && *s!='e' && *s!='i' && *s!='o' && *s!='u' && *s!='y') { 
     putchar(*s); //Write out one character at the time. 
    } 
    s++; 
} 
+1

대단히 감사합니다! :) – northerner