화웨이기 시험 문제

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; }

좋은 웹페이지 즐겨찾기