화웨이기 시험 문제
4695 단어 화웨이
// MyC.cpp : 。
//
#include "stdafx.h"
#include <assert.h>
#include <string.h>
#include <math.h>
/*
(a~z) 。 , , 。
“abacacde” “abcde”
*/
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)
{
char cTmp = 0;
long lIdx = 0;
/* */
assert(NULL != pInputStr);
assert(NULL != pOutputStr);
if (0 == lInputLen)
{
return;
}
while ((lIdx < lInputLen) && (pInputStr[lIdx] != '\0')) /* */
{
cTmp = pInputStr[lIdx++]; /* */
unsigned int i = 0;
unsigned int uiOutputLen = strlen(pOutputStr);
while (i < uiOutputLen) /* */
{
if (cTmp == pOutputStr[i])
{
break;
}
i++;
}
if (i == uiOutputLen) /* */
{
pOutputStr[i] = cTmp;
}
else
{
continue;
}
}
return ;
}
void stringFilter_test()
{
const char acInputStr[100] = "pppppppp";
char acOutputStr[100] = {0};
stringFilter(acInputStr, 100, acOutputStr);
printf("%s
", acOutputStr);
}
/*
(a~z) 。 , , 。
:
1. 。 "abcbc" , "abcbc".
2. " + "。 : "xxxyyyyyyz" "3x6yz"
*/
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
/* */
assert(NULL != pInputStr);
assert(NULL != pOutputStr);
if (lInputLen <= 0)
{
assert(0);
return ;
}
long lCount = 1; /* */
long lIdx = 1; /* 1 ,0 */
long lOutputIdx = 0;
char cTmp;
while (lIdx < lInputLen) /* */
{
cTmp = pInputStr[lIdx];
if (cTmp == pInputStr[lIdx - 1]) /* */
{
lCount++;
}
else
{
if (lCount > 1) /* , 1 */
{
pOutputStr[lOutputIdx++] = (char)lCount+'0'; /* */
pOutputStr[lOutputIdx++] = pInputStr[lIdx - 1];
}
else
{
pOutputStr[lOutputIdx++] = pInputStr[lIdx - 1];
}
lCount = 1; /* */
if (pInputStr[lIdx] == '\0') /* , */
{
break;
}
}
lIdx++ ;
}
return ;
}
void stringZip_test()
{
const char acInputStr[100] = ""; //pppppppp cccddecc
char acOutputStr[100] = {0};
stringZip(acInputStr, 100, acOutputStr);
printf("%s
", acOutputStr);
}
/*
100 、 , 。
:“ 1 2”,“ ” “ ” 。
:
1. , 。
2. , “0”。
100 。
*/
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr)
{
/* */
assert(NULL != pInputStr);
assert(NULL != pOutputStr);
if (lInputLen <= 0)
{
assert(0);
return ;
}
long lIdx = 0;
long lTmp = 0;
int iOp1Num = 0;
int iOp2Num = 0;
char cOp = 0; /* */
/* */
while (pInputStr[lIdx] != ' ') /* lIdx, */
{
lIdx++;
}
while (lTmp < lIdx)
{
iOp1Num += (pInputStr[lTmp] - '0') * (int)pow(10.0,(lIdx - lTmp - 1));
lTmp++;
}
printf("Op1 %d
", iOp1Num);
/* */
lTmp = lIdx;
lIdx++;
while (pInputStr[lIdx] != ' ') /* lIdx, */
{
lIdx++;
}
if ((lIdx - lTmp) > 2)
{
printf("Input param error.
");
return ;
}
else if ((lIdx - lTmp) == 2)
{
cOp = pInputStr[lIdx - 1];
}
printf("Op %c
", cOp);
/* */
lTmp = lIdx;
while (pInputStr[lIdx] != '\0') /* lIdx, */
{
lIdx++;
}
lTmp++;
while (lTmp < lIdx)
{
iOp2Num += (pInputStr[lTmp] - '0') * (int)pow(10.0, lIdx - lTmp -1);
lTmp++ ;
}
printf("Op2 %d
", iOp2Num);
int iResult = 0;
switch (cOp)
{
case '+':
{
iResult = iOp1Num + iOp2Num;
break;
}
case '-':
{
iResult = iOp1Num - iOp2Num;
break;
}
default:
assert(0);
}
printf("iResult = %d
", iResult);
/* */
int iRetTmp = 0;
while (iResult)
{
iRetTmp *= 10;
iRetTmp += iResult % 10;
iResult /= 10;
}
printf("iRetTmp = %d
", iRetTmp);
/* */
int iOutputIdx = 0;
while (iRetTmp)
{
pOutputStr[iOutputIdx++] = (iRetTmp % 10 + '0'); /* */
iRetTmp /= 10;
}
return;
}
void arithmetic_test()
{
const char acInputStr[100] = "22 + 3"; //99 ++ 77 22 + 3
char acOutputStr[100] = {0};
arithmetic(acInputStr, 100, acOutputStr);
printf("%s
", acOutputStr);
}
int _tmain(int argc, _TCHAR* argv[])
{
//stringZip_test();
arithmetic_test();
return 0;
}