UFO ET IT

별도의 부분 문자열을 만들지 않고 C- 문자열의 특정 부분 만 인쇄 할 수 있습니까?

ufoet 2020. 11. 23. 20:40
반응형

별도의 부분 문자열을 만들지 않고 C- 문자열의 특정 부분 만 인쇄 할 수 있습니까?


다음이 있다고 가정합니다.

char* string = "Hello, how are you?";

이 문자열의 마지막 5 바이트 만 인쇄 할 수 있습니까? 처음 5 바이트는 어떻습니까? printf이것을 허용하는 변형 이 있습니까?


이 문자열의 마지막 5 바이트 만 인쇄 할 수 있습니까?

예, 마지막 5 번째 문자에 포인터를 전달하면됩니다. 이를 통해 확인할 수 있습니다 string + strlen(string) - 5.

처음 5 바이트는 어떻습니까?

정밀도 지정자를 사용하십시오. %.5s

#include <stdio.h>
#include <string.h>
char* string = "Hello, how are you?";

int main() {
  /* print  at most the first five characters (safe to use on short strings) */
  printf("(%.5s)\n", string);

  /* print last five characters (dangerous on short strings) */
  printf("(%s)\n", string + strlen(string) - 5);

  int n = 3;
  /* print at most first three characters (safe) */
  printf("(%.*s)\n", n, string);

  /* print last three characters (dangerous on short strings) */
  printf("(%s)\n", string + strlen(string) - n);
  return 0;
}

예, 해당 문자열의 마지막 5 바이트는 다음을 사용하여 수행 할 수 있습니다.

printf ("%s\n", &(string[strlen (string) - 5]));

처음 5 개는 다음으로 수행 할 수 있습니다.

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

둘을 결합하여 문자열 내에서 하위 문자열을 얻을 수도 있습니다. 단어 how는 다음과 같이 인쇄 할 수 있습니다.

printf ("%.3s\n", &(string[strlen (string) + 7]));

작업을 수행 할 수 있도록 문자열이 충분히 긴지주의해야합니다. 한 문자 문자열의 마지막 5자를 인쇄하면 색인이에서 끝나기 때문에 정의되지 않은 동작이 발생 -4합니다. 즉,이를 시도하기 전에 문자열 길이를 확인하십시오.


두 가지 솔루션 :

같은 길이의 예측 가능한 문자열이 주어지면 날짜를 예로 사용하고 HH : MM : SS.DDDDDDD로 분할하도록 요청합니다.

char date[14] = "2359591234567";

[1] 읽기 쉬운 구현 :

char hh[3] = {0};
char mm[3] = {0};
char ss[3] = {0};
char dec[8] = {0};
strncpy ( hh, date, 2 );
strncpy ( mm, date+2, 2 );
strncpy ( ss, date+4, 2 );
strncpy ( dec, date+6, 7 );

printf("%s:%s:%s.%s\n", hh, mm, ss, dec);

[2] 간단한 구현 :

어느 한 쪽:

printf("%.2s:%.2s:%.2s.%.7s\n", date, date+2, date+4, date+6);

또는:

printf("%2.2s:%2.2s:%2.2s.%7.7s\n", date, date+2, date+4, date+6);

작동해야합니다.

printf 대신-sprintf를 사용하고 버퍼에 복사 할 수 있습니다. 또한 예측할 수없는 동작을 피하기 위해 올바른 길이를 확인합니다.

두 경우 모두 출력은 다음과 같습니다.

23:59:59.1234567

참고 URL : https://stackoverflow.com/questions/7780809/is-it-possible-to-print-out-only-a-certain-section-of-ac-string-without-making

반응형