2013-10-21 5 views
1

string을 가운데 정렬하여 인쇄하는 사람이 있습니까? 예를 들어어떻게 센터 정렬 된 문자열을 C로 인쇄합니까

:에서는

int main() 
{ 
    int a = 20; 
    char x[10] = "Hello"; 
    char y[10] = "Hello"; 
    printf ("%*s\n",a, x); 
    printf ("%-*s\n",a,y); 
} 

오른쪽으로 정렬 된 제 지문 Hello, 20

에 각각 길이 제한이

    Hello 
Hello 

같이 좌측에 제 printf

센터에 정렬 된 Hello를 인쇄하는 방법이 있습니까?

 Hello    

사전

+1

두 번째'printf' 형식 지정자에서's'를 거의 잊어 버렸습니다. –

+0

0xF1 제안 된 수정에 감사드립니다. –

답변

2

, 당신은 아마 특히 콘솔, 중앙 정렬 된 텍스트를 피하고 싶은;

이 그것을 할 수있는 빠르고 더러운 방법입니다 이것은 약간의 일을 할 것입니다.

printf가이 작업을 시작하는 방법을 알지 못하는 이유는 완전히 결정론적인 작업이 아니기 때문입니다. 모든 문자열을 모든 공백의 가운데에 배치 할 수있는 것은 아닙니다.

특히, space_for_string - strlen(string)이 짝수가 아닌 경우 문자열을 이동할 위치를 선택해야합니다.

어쨌든 "%*s" 지정자를 사용하고 싶지만 너비 필드에 입력하는 숫자는 20과 같이 간단하지 않을 수 있습니다.

대신 공백의 너비의 절반에 문자열의 너비의 절반을 더한 을 입력하고 싶습니다..

int main() 
{ 
    int space = 20; 
    char *string = "Hello"; 
    printf ("%*s\n", space/2 + strlen(string)/2,string); 
} 
+0

답변 해 주셔서 감사합니다. Williams Totland –

2

에서 20

감사합니다에 총 길이를 제한하는 것은 C stdio 라이브러리를 사용하여이 작업을 수행하는 표준화 된 방법은 없습니다. *printf 호출을 사용하거나 자신의 printf 형식 지정자를 사용하여 코드를 직접 작성해야합니다. 그러나 어떤 경우에,

일반적으로
int main() 
{ 
    int a = 20; 
    char x[] = "Hello"; 

    int length = strlen(x); 

    printf ("%*s%*c" 
      ,((a - length) >> 1) + length // string length + padding spaces 
      , x 
      , ((a - length) >> 1) + ((a - length) & 1) // tailing spaces 
      , ' ' 
    ); 
} 
1

당신은 터미널에서 라인의 중심과 당신이 리눅스에서 작업하는 경우 텍스트를 인쇄에 도착 ncurses 라이브러리를 사용할 수 있습니다.

+0

+1 바주카포가있는 파리를 죽이십시오. P –

+0

@AlterMann : 전술 핵연료 장치와 더 흡사합니다. –

1

윌리엄 토틀 랜드 (Williams Totland)의 답변에 따르면 필요한 공백 만 계산하면 printf을 사용할 수 있습니다. 나는 (그것이 비록 제한) 내 지식을 새로 고침하는 과정에있어 때문에, 메모리 관리에, 나는이 함께했다 : sprintf 또는 strncat를 사용

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

int main() 
{ 
    int a = 20; 
    char x[10] = "Hello"; 
    char *spaces_ptr;//padding str pointer 
    a = (a-strlen(x))/2; 
    //allocate the required mem, calloc ensures zero terminated 
    spaces_ptr = calloc(a + 1, sizeof(char)); 
    memset(spaces_ptr, ' ', a);//set a chars to hold spaces 
    //print 
    printf("%s%s", spaces, x); 
    free(spaces);//free memory 
    return 0; 
} 

도 물론 옵션입니다 ... 또는 심지어 :

char *fullStr = calloc(strlen(x) + a + 1, sizeof(char)); 
memset(fullStr, ' ', a); 
strncpy(fullStr+a, x, strlen(x)); 
puts(fullStr); 
free(fullStr); 

이 마지막 스 니펫은 전체 답변과 마찬가지로 사후 검토입니다.어쨌든 check this codepad to see it in action

0

내 작은 라이브러리를보십시오 : libTprint 코드는 매우 간단하며 텍스트 정렬 방법을 이해할 수 있어야합니다.

희망은 당신을 돕는다!