📄 tparsestring.cpp
字号:
// TParseString.cpp: implementation of the TParseString class.
//
//////////////////////////////////////////////////////////////////////
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include "stdafx.h"
#include "TParseString.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
BOOL TParseString::ParseBracket(TParseString &retString)
{
int iNoOfOpenBrackets = 1;
int iRightPosition = m_iPosition + 1;
int iLen = GetLength();
m_bErrorOccured = FALSE;
// iposition must index an opening bracket
if ((m_iPosition >= iLen) || GetAt(m_iPosition) != '(' )
return FALSE;
while (iNoOfOpenBrackets > 0)
{
// reached the end of the string ? error
if (iRightPosition >= iLen)
return FALSE;
// look at the next character
switch (GetAt(iRightPosition))
{
case '(':
iNoOfOpenBrackets++;
break;
case ')':
iNoOfOpenBrackets--;
break;
}
iRightPosition++;
}
retString.CString::operator=(Mid(m_iPosition + 1, iRightPosition - m_iPosition - 2));
m_iPosition = iRightPosition + 1;
return TRUE;
}
BOOL TParseString::ParseString(CString &str)
{
int iRightPos;
BOOL bReady = FALSE;
int len = GetLength();
char tmp;
m_bErrorOccured = FALSE;
OverreadLeadingSpaces();
iRightPos = m_iPosition + 1;
// check, if there is a string
if (m_iPosition - 1 >= len)
{
// the expected string is not there
m_iPosition++;
return FALSE;
}
// search for a ' ' or ')'
bReady = FALSE;
while (!bReady && (iRightPos < len))
{
tmp = GetAt(iRightPos);
switch (tmp)
{
case ' ':
case ')':
case '\r':
case '\n':
bReady = TRUE;
break;
default:
iRightPos++;
}
}
// get the string
str = Mid(m_iPosition, iRightPos - m_iPosition);
m_iPosition = iRightPos + 1;
return TRUE;
}
int TParseString::ParseInteger()
{
int iValue = 0;
BOOL bSign = FALSE;
BOOL bReady = FALSE;
char cChar;
int len = GetLength();
m_bErrorOccured = TRUE;
OverreadLeadingSpaces();
// read in the number
while (!bReady && (m_iPosition < len))
{
cChar = GetAt(m_iPosition);
switch(cChar)
{
case '-':
// only one - sign expected
bSign = TRUE;
m_iPosition++;
break;
case '+':
m_iPosition++;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
iValue = 10 * iValue + cChar - '0';
m_bErrorOccured = FALSE;
m_iPosition++;
break;
case ')':
case ' ':
m_iPosition++;
// no break here
default:
bReady = TRUE;
}
}
// convert the number if neccessary
if (bSign)
iValue = -iValue;
return iValue;
}
double TParseString::ParseDouble()
{
double dValue = 0.0;
double dNumber;
BOOL bSign = FALSE;
BOOL bReady = FALSE;
BOOL bDot = FALSE;
double dDivisor = 1.0;
char cChar;
int len = GetLength();
m_bErrorOccured = TRUE;
// read in the number
while (!bReady && (m_iPosition < len))
{
cChar = GetAt(m_iPosition);
switch(cChar)
{
case '-':
// only one - sign expected
bSign = TRUE;
m_iPosition++;
break;
case '+':
m_iPosition++;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
dValue = 10.0 * dValue + (double) (cChar - '0');
dDivisor *= 10.0;
m_bErrorOccured = FALSE;
m_iPosition++;
break;
case '.':
case ',':
dDivisor = 1.0;
bDot = TRUE;
m_iPosition++;
break;
case ')':
case ' ':
m_iPosition++;
// no break here
default:
bReady = TRUE;
}
}
// convert the number if neccessary
if (bDot)
dNumber = dValue / dDivisor;
else
dNumber = dValue;
if (bSign)
dNumber = -dNumber;
return dNumber;
}
void TParseString::OverreadLeadingSpaces()
{
char tmp;
// overread inital spaces, returns and new lines
while (m_iPosition < GetLength())
{
tmp = GetAt(m_iPosition);
switch (tmp)
{
case ' ':
case '\r':
case '\n':
m_iPosition++;
break;
default:
return;
}
}
}
void TParseString::SetPosition(int pos)
{
if (pos >= GetLength())
{
m_iPosition = GetLength() - 1;
if (m_iPosition < 0)
m_iPosition = 0;
}
else if (pos < 0)
m_iPosition = 0;
else
m_iPosition = pos;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -