UFO ET IT

printf를 사용하여 문자를 반복하는 방법은 무엇입니까?

ufoet 2020. 11. 25. 21:42
반응형

printf를 사용하여 문자를 반복하는 방법은 무엇입니까?


printf("?", count, char)캐릭터 count시간 을 반복하는 것과 같은 것을하고 싶습니다 .

이를 수행하는 데 적합한 형식 문자열은 무엇입니까?

편집 : 예, printf()루프에서 호출 할 수 있다는 것이 분명 하지만 피하고 싶었던 것입니다.


짧은 답변-예, 긴 답변 : 원하는 방식이 아닙니다.

가변 너비를 허용하는 printf 의 % * 형식을 사용할 수 있습니다 . 그리고 인쇄 할 값으로 '0'을 사용 하면 왼쪽이 0으로 채워진 오른쪽 정렬 텍스트와 결합 됩니다.

printf("%0*d\n", 20, 0);

생성 :

00000000000000000000

혀가 뺨에 단단히 고정 된 상태에서이 작은 공포 쇼 코드를 제공합니다.

때때로 당신 은 왜 당신이 나머지 시간 동안 그렇게 열심히 노력하는지 기억하기 위해 나쁜 일을해야 합니다.

#include <stdio.h>

int width = 20;
char buf[4096];

void subst(char *s, char from, char to) {
    while (*s == from)
    *s++ = to;
}

int main() {
    sprintf(buf, "%0*d", width, 0);
    subst(buf, '0', '-');
    printf("%s\n", buf);
    return 0;
}

다음 기술을 사용할 수 있습니다.

printf("%.*s", 5, "=================");

이것은 "=====" Visual Studio에서 나를 위해 작동하며 모든 C 컴파일러에서 작동하지 않아야 할 이유가 없습니다.


0 또는 공백을 반복하도록 제한하는 경우 다음을 수행 할 수 있습니다.

공백의 경우 :

printf("%*s", count, "");

0의 경우 :

printf("%0*d", count, 0);

C ++에서는 std :: string을 사용하여 반복되는 문자를 얻을 수 있습니다.

printf("%s",std::string(count,char).c_str());

예를 들면 :

printf("%s",std::string(5,'a').c_str());

산출:

aaaaa

그와 같은 일은 없다. 또는를 사용하여 루프를 작성 printf하거나 puts문자열 카운트 횟수를 새 문자열로 복사하는 함수를 작성해야합니다.


printf그렇게하지 않습니다 printf. 단일 문자를 인쇄하기에는 과잉입니다.

char c = '*';
int count = 42;
for (i = 0; i < count; i ++) {
    putchar(c);
}

이것이 비효율적이라고 걱정하지 마십시오. putchar()출력을 버퍼링하므로 필요한 경우가 아니면 각 문자에 대해 물리적 출력 작업을 수행하지 않습니다.


alloca () 함수를 지원하는 컴파일러가 있다면 가능한 해결책이 될 수 있습니다.

printf("%s", (char*)memset(memset(alloca(10), '\0', 10), 'x', 9));

기본적으로 '\ 0'으로 채워진 스택에 10 바이트를 할당하고 처음 9 바이트는 'x'로 채워집니다.

C99 컴파일러가 있다면 더 깔끔한 솔루션이 될 수 있습니다.

for (int i = 0;  i < 10;  i++, printf("%c", 'x'));

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

void repeat_char(unsigned int cnt, char ch) {
    char buffer[cnt + 1];
    /*assuming you want to repeat the c character 30 times*/
    memset(buffer,ch,cnd); buffer[cnt]='\0';
    printf("%s",buffer)
}

이 작업을 수행하는 기능을 만들고 사용할 수 있습니다.

#include <stdio.h>

void repeat (char input , int count )
{
    for (int i=0; i != count; i++ )
    {
        printf("%c", input);
    }
}

int main()
{
    repeat ('#', 5);
    return 0;
}

이것은 출력됩니다

#####

printf("%.*s\n",n,(char *) memset(buffer,c,n));

n<= sizeof(buffer)[어쩌면 n <2 ^ 16]

그러나 옵티마이 저는이를로 변경할 수 puts(buffer)있으며 EoS 부족은 .....

그리고 가정은 memset이 어셈블러 명령어라는 것입니다 (하지만 여전히 루프는 칩에 있습니다).

전제 조건 '루프 없음'이 주어지면 해결책이 없습니다.


char buffer[41];

memset(buffer, '-', 40);    // initialize all with the '-' character<br /><br />
buffer[40] = 0;             // put a NULL at the end<br />

printf("%s\n", buffer);     // show 40 dashes<br />

이런 식으로하는 것 같아요.

void printchar(char c, int n){
     int i;
     for(i=0;i<n;i++)
         print("%c",c);
}

printchar("*",10);

참고 URL : https://stackoverflow.com/questions/14678948/how-to-repeat-a-char-using-printf

반응형