2017-01-29 11 views
2

C를 사용하는 문자열에서 스페이스를 개행 (​​"\ n")으로 바꾸려면 어떻게해야합니까?공백을 새 줄로 바꾸려면 어떻게합니까?

+0

질문이 정확하지 않습니다. 어떤 문맥에서 공백을 줄 바꿈? 파일을 읽으십니까? 문자열 검색? – chqrlie

+0

... 또한 * * 정확히 * "* 개행 *"으로 간주합니까? – alk

+0

@chqrlie 더 나은가요? 나는 비슷한 질문을 읽었 기 때문에이 질문을 만들었지 만 단순한 직설적 대답은 없었고 그의 질문에 그의 코드는 지저분하고 필요하지 않은 변수를 가졌다. –

답변

2

귀하의 질문은 매우 모호합니다. 해당 문자열이 문자열을 수정에 관심이 있다면

, 당신은 알고 있어야합니다

#include <stdio.h> 

int main(void) { 
    int c; 

    while ((c = getchar()) != EOF) { 
     putchar(c == ' ' ? '\n' : c); 
    } 
    return 0; 
} 

편집 : 여기

은 줄 바꿈으로 입력 스트림의 모든 공간을 변경하는 간단한 필터입니다 리터럴은 수정할 수 없으며 수정하려고 시도하면 정의되지 않은 동작이 발생합니다.

해당 공백 문자를 찾고 해당 줄 바꿈 문자 ('\n')를 해당 오프셋에 저장해야합니다.

당신은 포인터와 strchr() 기능을 사용할 수 있습니다

:

char *p = strchr(string, ' '); 
if (p != NULL) { 
    *p = '\n'; 
} 

루프의 모든 공간 처리를 :

for (char *p = string; (p = strchr(p, ' ')) != NULL; p++) { 
    *p = '\n'; 
} 

또는 인덱스 변수와 for 루프를 사용할 수 있습니다

for (size_t i = 0; string[i] != '\0'; i++) { 
    if (string[i] == ' ') { 
     string[i] = '\n'; 
     //break; // uncomment the break if you want a single space changed 
    } 
} 
+0

좋은 대답은 내 것보다 조금 더 간단합니다. –

+0

'while'-loop의 직후에'if ((c == EOF) && ferror (stdin)) {perror ("getchar() failed;)"}와 같은 몇 가지 추가적인 에러 검사/-) – alk

+0

@alk :'getchar()'실제로 파일의 끝과 읽기 오류 모두에 대해'EOF'를 반환합니다. 대부분의 유닉스 샘플 프로그램은 오류 케이스를 기쁘게 무시한다. 만약 그것들을 다루기를 원한다면 당신의 제안은 괜찮지 만,'putchar()'에 대한 동등한 테스트와 마지막'fflush (stdout)'에 대한 점검으로 끝내야합니다. 그러면 교육적인 가치가 떨어진 성가신 코드가 생길 것입니다. 더 나은 오류 처리는 명시 적 버퍼링을 사용하는 다른 접근 방식을 필요로합니다. – chqrlie

4
#include <stdio.h> 
#include <string.h> 
#define SIZE 50 

int main(int argc, char **argv) 
{ 
    char string[] = "this is my string"; 
    size_t length, c; 

    length = strlen(string); 

    for(c = 0; c < length; ++c) 
    { 
      if(string[c] == ' ') 
      { 
       string[c] = '\n'; 
      }  
    } 

    printf("%s\n", string); 

    return 0; 
} 
+0

나는 이것이'c neoaggelos

+1

문자열의 끝은 공백을 포함 할 수있다. 그러나 대부분의 상황에서는 두 줄의 새로운 줄로 끝날 것이다. 도움말을위한 건배 –

+0

'strlen()'은'int'가 아닌'size_t'를 반환합니다. 따라서'c'와'length'는 실제로'size_t '이어야합니다. – alk

1

간단한 프로그램 :

int c;//return of fgetc type is int 

while(EOF!=(c=fgetc(file))) 
    putchar(c == ' ' ? '\n ' : c); 
+0

OP가 묻습니다 * 어떻게 공백을 새로운 줄로 바꿉니 까? * 모든 공백을 새 줄로 바꾸는 방법 * – chqrlie

+0

@chqrlie : 아마도 다음을 수행합니다 :'program out.txt' – alk

+1

그게 분명히 가정 ...하지만 당신은'while ((c = fgetc (file))! = EOF) 쓰는게 좋을 것 같아요 putchar (c == ''? '\ n': c); ' – chqrlie