// p53 - string

class CP53Doc:public CDocument
{
protected:
CP53Doc ();
DECLARE_DYNCREATE (CP53Doc);
char aa [50]; // input string
int ad, ae; // ad - pointer to input char in string <aa>, ae - flag of <Enter>
int ag [10]; // results
char aj [50], ak [50], al [50];
CString am [10];
char ap [50];
void bb ();
}
CP53Doc::CP53Doc ()
{
aa [0] = 0; // input string to be displayed
ad = ae = 0;
}
void CP53Doc::bb ()
{
int a, b;
// 53.1.53.1
a = b = 0;
while (aa [a])
{
if (aa [a] == 'a') b++;
a++;
}
ag [0] = b;
// 54.2.54.2
aj [a] = 0;
b = a - 1;
while (a)
{
a--;
aj [b - a] = aa [a];
}
// 55.3.55.3
b++;
ak [b] = 0;
for (a = 0; a < b; a++)
{
ak [a] = aa [a];
if (ak [a] == 'a') ak [a] = 'b';
}
// 60.8.4
// 61.9.5
// 65.9.6
a = 0;
while (aa [a] >= '0' && aa [a] <= '9')
{
al [a] = aa [a];
a++;
}
if (a < 49)
{
al [a] = '.';
a++;
}
if (a < 49)
{
al [a] = '.';
a++;
}
while (a < 49 && aa [a - 2])
{
al [a] = aa [a - 2];
a++;
}
al [a] = 0;
// 77.15.7
switch (aa [0])
{
case 'A': am [0] = "7. Alexeev."; break;
case 'B': am [0] = "7. Bulgakov."; break;
case 'C': am [0] = "7. Cleopatra."; break;
case 'D': am [0] = "7. Dostoevski."; break;
default: am [0] = "7. Voloshin, Gogol etc.";
}
if (aa [0] < 'A' || aa [0] > 'Z') am [0] = "7. You should input capital letter.";
// 79.17.8
// 85.22.9
a = 0;
while (aa [a] && aa [a] != ' ')
{
ap [a] = aa [a];
a++;
}
ap [a] = 0;
// 86.24.10
a = 0;
while (aa [a]) a++;
ag [1] = a;
}
void CP53View::OnDraw (CDC *pDC)
{
CP53Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
CString a; // output string
pDC -> TextOut (10, 10, "Input string:");
pDC -> TextOut (10, 35, pdoc -> aa);
if (pdoc -> ae) // flag - user pressed <Enter> to print results
{
a.Format ("1. Number of 'a' is equal to %i.", pdoc -> ag [0]);
pDC -> TextOut (10, 85, a);
a.Format ("2. %s", pdoc -> aj);
pDC -> TextOut (10, 110, a);
a.Format ("3. %s", pdoc -> ak);
pDC -> TextOut (10, 135, a);
a.Format ("4. You have pressed button '%c'.", pdoc -> aa [0]);
pDC -> TextOut (10, 160, a);
a.Format ("5. I know your name; your name is %s", pdoc -> aa);
pDC -> TextOut (10, 185, a);
a.Format ("6. %s", pdoc -> al);
pDC -> TextOut (10, 210, a);
pDC -> TextOut (10, 235, pdoc -> am [0]);
a.Format ("8. %c", pdoc -> aa [0]);
pDC -> TextOut (10, 260, a);
a.Format ("9. %s", pdoc -> ap);
pDC -> TextOut (10, 285, a);
a.Format ("10. String %s has length %i symbols.", pdoc -> aa, pdoc -> ag [1]);
pDC -> TextOut (10, 310, a);
}
}
void CP53View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
CP53Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
if (nChar == 8) // pressed <Backspace>
{
if (pdoc -> ad) {pdoc -> ad--; pdoc -> aa [pdoc -> ad] = 0;}
goto aaa;
}
if (nChar == 13) // pressed <Enter>
{
pdoc -> ae = 1;
pdoc -> bb ();
goto aaa;
}
if (pdoc -> ad < 49) // adding symbol to string <aa>
{
pdoc -> aa [pdoc -> ad] = nChar;
pdoc -> aa [pdoc -> ad + 1] = 0;
pdoc -> ad++;
}
aaa:
Invalidate ();
CView::OnChar (nChar, nRepCnt, nFlags);
}

Комментарии