sourcetip

문자[]의 일부분을 C로 인쇄하는 가장 간단한 방법

fileupload 2023. 10. 30. 21:12
반응형

문자[]의 일부분을 C로 인쇄하는 가장 간단한 방법

예를 들면 제가.char* str = "0123456789"처음 세 글자와 마지막 세 글자를 자르고 중간만 인쇄하려고 하는데, 가장 간단하고 안전한 방법은 무엇입니까?

자, 비결은.자를 부분과 인쇄할 부분은 크기가 다양해서 아주 긴 char*, 아니면 아주 작은 char*를 가질 수 있었습니다.

사용가능printf(), 그리고 특별한 형식 문자열:

char *str = "0123456789";
printf("%.6s\n", str + 1);

정확도가.%s변환 지정자는 인쇄할 최대 문자 수를 지정합니다.변수를 사용하여 런타임의 정밀도를 지정할 수도 있습니다.

int length = 6;
char *str = "0123456789";    
printf("%.*s\n", length, str + 1);

이 예제에서 *는 다음 인수(length)에 대한 정밀도가 포함될 것입니다.%s변환, 해당 인수는 다음과 같습니다.int.

포인터 산술을 사용하여 위와 같이 시작 위치를 지정할 수 있습니다.

[편집]

문자열이 정밀 지정자보다 짧으면 다음과 같은 문자가 더 적게 인쇄됩니다.

int length = 10;
char *str = "0123456789";
printf("%.*s\n", length, str + 5);

인쇄 예정"56789". 항상 특정 문자 수만큼 인쇄하려면 최소 필드 너비와 정밀도를 모두 지정합니다.

printf("%10.10s\n", str + 5);

아니면

printf("%*.*s\n", length, length, str + 5);

다음을 인쇄합니다.

"     56789"

마이너스 기호를 사용하여 필드의 출력을 왼쪽으로 조정할 수 있습니다.

printf("%-10.10s\n", str + 5);

마지막으로 최소 필드 폭과 정밀도가 다를 수 있습니다.

printf("%8.5s\n", str);

는 8자 필드에 최대 5자 오른쪽 justified으로 인쇄됩니다.

로버트 갬블과 스티브는 대부분의 작품을 따로 가지고 있습니다.전체로 조립:

void print_substring(const char *str, int skip, int tail)
{
    int len = strlen(str);
    assert(skip >= 0);
    assert(tail >= 0 && tail < len);
    assert(len > skip + tail);
    printf("%.*s", len - skip - tail, str + skip);
}

예제에 대한 호출:

print_substring("0123456789", 1, 3);

데이터를 수정하는 것이 괜찮다면 포인터 연산을 할 수 있습니다.str이 배열이 아닌 문자 포인터라고 가정합니다.

char string[] = "0123456789";
char *str = string;

str += 3; // "removes" the first 3 items
str[4] = '\0'; // sets the 5th item to NULL, effectively truncating the string

printf(str); // prints "3456"

개인 라이브러리에서 찾은 깨끗하고 간단한 하위 문자열 기능은 유용할 수 있습니다.

char *
substr(const char *src, size_t start, size_t len)
{
  char *dest = malloc(len+1);
  if (dest) {
    memcpy(dest, src+start, len);
    dest[len] = '\0';
  }
  return dest;
}

이것은 아마도 스스로 설명할 수 있지만 문자열, 시작 위치(0에서 시작), 길이를 사용하고 malloc이 실패하면 원래 문자열의 하위 문자열이나 null 포인터를 반환합니다.반환되는 포인터는 다음과 같을 수 있습니다.free더 이상 메모리가 필요 없을 때 호출자가 호출합니다.C의 정신에서 함수는 제공된 시작 위치와 길이를 검증하지 않습니다.

printf로 할 수 있는 마법 중에 특정한 숫자의 글자만 인쇄할 수 있는 것이 있다고 생각하지만, 그것은 일반적으로 이해되거나 사용되지 않습니다.우리는 이전 직장에서 하려고 했지만 지속적으로 작동하지 못했습니다.

제가 할 일은 문자를 저장하고 문자열에 있는 문자를 무효화하고 인쇄한 다음 다시 저장하는 것입니다.

언급URL : https://stackoverflow.com/questions/256218/the-simplest-way-of-printing-a-portion-of-a-char-in-c

반응형