programing

printf를 사용하여 문자를 반복하는 방법

bestcode 2022. 8. 15. 21:13
반응형

printf를 사용하여 문자를 반복하는 방법

뭔가 하고 싶은 게 있는데printf("?", count, char)글자를 되풀이하다count시대.

이를 실현하기 위한 올바른 format-string은 무엇입니까?

편집: 네, 분명히 전화할 수 있습니다.printf()하지만 그게 바로 내가 피하고 싶었던 거야

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

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

이것은 인쇄됩니다."=====" Visual Studio에서는 동작합니다.모든 C 컴파일러에서 동작하지 않을 이유가 없습니다.

간단한 답변 - 네, 긴 답변: 당신이 원하는 방식이 아닙니다.

가변 너비를 사용할 수 있는 printf의 %* 형식을 사용할 수 있습니다.또, 인쇄하는 값으로 「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;
}

0 또는 공백 반복으로 제한하면 다음을 수행할 수 있습니다.

공백의 경우:

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

0의 경우:

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

그런 건 없어요.루프를 작성해야 합니다.printf또는puts또는 문자열 카운트 횟수를 새 문자열로 복사하는 함수를 작성합니다.

c++에서는 std::string을 사용하여 반복 문자를 가져올 수 있습니다.

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

예를 들어 다음과 같습니다.

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

출력:

aaaaa

printf그렇게 하지 않습니다.printf한 글자를 인쇄하는 건 과잉 살상이야

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

이것이 비효율적이라고 걱정하지 마세요.putchar()는 출력을 버퍼링하기 때문에 필요한 경우를 제외하고 각 문자에 대해 물리적인 출력 조작을 실행하지 않습니다.

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 />

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

#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;
}

이렇게 하면 출력됩니다.

#####

alloca() 함수를 지원하는 컴파일러가 있는 경우 가능한 해결책입니다(단, 상당히 추악합니다).

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

기본적으로 스택에 10바이트를 할당하고 '\0'으로 채워진 후 처음 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)
}

이런 거 하는 것 같아요.

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

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

n<=>sizeof(buffer)[n < 2^16 ]도 있을 수 있습니다]

단, 옵티마이저는 다음과 같이 변경할 수 있습니다.puts(buffer)EoS가 부족하면...

또한 memset은 어셈블러 명령이라고 가정합니다(단, 루프 온 칩).

'No loop'이라는 전제조건이 주어지면 해결방법이 없다는 것을 엄밀히 알 수 있다.

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

반응형