2013-09-21 1 views
1

저는 학교 4 학년에 있으며 우리는 PHP 클래스와 자바 스크립트 클래스 모두에서 이미 이라는 진리표를 작성하고 있습니다. 지금까지 우리는 출력을 위해 을 배웠습니다 (우리는 콘솔 어플리케이션을 수행 중입니다).C++ 지정된 크기로 텍스트를 가운데에 맞춰주는 기능

우리는 setw()에 대해 알았지 만, 나는 집에서 만든 테이블에 텍스트를 집중시키기를 원했습니다. 문자열을 입력하는 함수를 작성하는 방법과 필드의 전체 크기를 알려주고 해당 크기의 파일을 중심으로 문자열을 반환 할 수 있습니까?

Example output I'm trying to generate: 
+---+---+----+----+--------+--------+ 
| x | y | !x | !y | x && y | x || y | 
+---+---+----+----+--------+--------+ 
| T | T | F | F | T | T | 
+---+---+----+----+--------+--------+ 
| T | F | F | T | F | T | 
+---+---+----+----+--------+--------+ 

Example code I want to use: 

#include <iostream> 
#include <string> 
using namespace std; 

... 

//Declare Constants and Variables 
const char *COL1HDR = "x"; 
const int COL1SZ = strlen(COL1HDR) + 2; // 2 for padding L & R 
const char *COL2HDR = "y"; 
const int COL2SZ = strlen(COL2HDR) + 2; 
const char *COL3HDR = "!x"; 
const int COL3SZ = strlen(COL3HDR) + 2; 
const char *COL4HDR = "!y"; 
const int COL4SZ = strlen(COL4HDR) + 2; 
const char *COL5HDR = "x && y"; 
const int COL5SZ = strlen(COL5HDR) + 2; 
const char *BOXPART = "+---+---+----+----+--------+--------+"; 
char c1a[COL1SZ+1], c2a[COL2SZ+1], c3a[COL3SZ+1], 
    c4a[COL4SZ+1], c5a[COL5SZ+1];   // Will hold 'T', 'F' or Header 
bool x, y; // two variables for the truth table 
bool a // Boolean placeholder for the logic result 

// Build Header Row 
c1a = cntr(COL1HDR, COL1SZ); 
c2a = cntr(COL2HDR, COL2SZ); 
c3a = cntr(COL3HDR, COL3SZ); 
c4a = cntr(COL4HDR, COL4SZ); 
c5a = cntr(COL5HDR, COL5SZ); 


//Display header of table 
cout << BOXPART << endl; 
cout << "|" << c1a << "|" << c2a << "|" << c3a << "|" << c4a << "|" << c5a << "|\n"; 
cout << BOXPART << endl; 

// Calculate first row of table 
x = 1; // 0 = False, 1= True 
y = 1; 
a = x  ; c1a = (a) ? 'T' : 'F'; c1a = cntr(c1a, COL1SZ); 
a =  y; c2a = (a) ? 'T' : 'F'; c2a = cntr(c2a, COL2SZ); 
a = !x  ; c3a = (a) ? 'T' : 'F'; c3a = cntr(c3a, COL3SZ); 
a =  !y; c4a = (a) ? 'T' : 'F'; c4a = cntr(c4a, COL4SZ); 
a = x && y; c5a = (a) ? 'T' : 'F'; c5a = cntr(c5a, COL5SZ); 

// Display first row of table 
cout << "|" << c1a << "|" << c2a << "|" << c3a << "|" << c4a << "|" << c5a << "|\n"; 
cout << BOXPART << endl; 

최종 진리 테이블에는 여기에 표시된 것보다 많은 열이 있지만 아이디어를 얻을 수 있습니다.

누군가가 cntr 기능을 크롤링하는 방법을 말해 줄 수 있다면 크게 감사하겠습니다. 그것은 숙제를 끝내는 데 도움이 될 것이지만, 그것은 나를 위해 숙제를하는 것이 아닙니다. (서식은 내 생각과 과제의 일부이다.)

당신은 내가 할 노력하고있어 최종 테이블을 볼 수 있습니다에서 : http://skewl.us/truth.php (. 나는 색상을 추가 할만큼 거의 Savy은 아니에요)

하나의 마지막 참고 사항 :이 숙제의이 질문/답변을 참조하겠습니다. 어떤 사람이 나를 도와 준다면 나는 그것을 원래의 작품으로 전하지 않을 것이라고 말하고 싶다.

감사합니다, ~ D

답변

0

당신은 할 수 항상 "패드"가 중심에 도달 할 때까지 문자열 : 속도가 요인이라면 당신이 그 임시 문자열을 교체 할 수 있습니다, 물론

string Pad(string StringToPad, int Amount, string PadChars, bool Left) 
{ 
    string Temp; 
    for (std::size_t I = Amount; I > StringToPad.size(); --I) 
     Temp += PadChars; 

    return (Left ? (Temp + StringToPad) : (StringToPad + Temp)); 
} 

std::stringstream.

관련 문제