문제

내 마음에 오는 첫 번째 일은 많은 t를하는 것입니다. 그러나 어떤 단어가 몇 가지 문자로 다른 단어보다 길면 단어가 잘못 정렬 될 수 있습니다.

예를 들어, 나는 다음과 같은 것을 갖고 싶습니다.

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName   T

대신, 내 cout 문에 " t"만 포함함으로써 나는

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName                T

또는

Name    Last Name            Middle initial
Bob     Jones    M
Joe     ReallyLongLastName   T

또 무엇을해야합니까?

편집 : 따라서 먼저 표시하려는 각 열의 최대 너비를 계산 한 다음 그에 따라 패딩 공간을 추가해야합니다. 그러나 어떻게, 어떤 기능으로, 나는 이것을 할 수 있습니까? 단순히 문자열에 숯 수를 세고 거기에서 가야합니까?

도움이 되었습니까?

해결책

사용 std::setw ~에서 <iomanip>

예를 들어

using std::cout;
using std::setw;

cout << setw(10) << "This" <<
        setw(10) << "is" <<
        setw(10) << "a" <<
        setw(10) << "test" << '\n';

산출:

      This        is         a      test

다른 팁

또한 다른 편집자/뷰어가 탭 너비가 다른 텍스트를 보여줍니다. 따라서 탭을 사용하여 한 시청자에게 멋지게 배열 된 텍스트는 다른 시청자가 못 생겼을 수 있습니다.

정말 멋진 배열을 만들고 싶다면 패딩 공간을 사용할 수 있으며 텍스트에 두 번의 패스를 수행 할 수 있습니다. 먼저 각 열의 최대 너비를 계산 한 다음 각 열에 올바른 양의 패딩 공간을 추가하십시오. 후자의 경우 재단사를 사용할 수도 있습니다. printf 전화.

업데이트: 열 폭을 계산한다는 것은 기본적으로 주어진 열에있는 문자열의 길이를 계산하는 것을 의미합니다. 사용을 수행 할 수 있습니다 string::length() 또는 strlen(), 당신이 사용 중인지에 따라 std::string 또는 char* (전자는 권장됩니다). 그런 다음 해당 열의 모든 단어를 반복하고 지금까지 가지고있는 최대 단어 길이를 비교하고 현재 단어가 더 길면 그 길이를 새로운 최대로 설정합니다. STL 컨테이너에 단어를 저장하면 std::max_element 연산 단일 기능 호출로 작업을 수행합니다.

사용 printf() 패딩 마이너스 좌회전을위한 깃발

 printf("%-8s%-21s%-7s%-6s\n", "Name", "Last Name", "Middle", "initial");
 printf("%-8s%-21s%-7s%-6s\n", "Bob", "Jones", "M", "");
 printf("%-8s%-21s%-7s%-6s\n", "Joe", "ReallyLongLastName", "T", "");

생산 :

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName   T

이와 같은 상황의 경우 일반적으로 두 개의 패스가 필요합니다. 하나는 각 열의 최대 너비를 발견하고 다른 하나는 인쇄를 수행합니다. 표준 ioStream의 경우 사용할 수 있습니다 width() ioStream이 패딩을 자동으로 처리하도록하는 루틴.

문자열 서식 (stdio)을 사용하여 각 줄을 표시하십시오.

http://www.cppreference.com/wiki/c/io/printf

최소 필드 너비를 설정할 수 있으므로 각 필드의 나머지 부분을 배치합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top