find the currency symbol in given paragraph on command line prompt..and i trying output answer replace currency put #c symbols.
I trying that one..
in this project i get all functions.i trying create main function for this project.
/////////////////////////////////first function////////////////////////////////////////
static auto checkForCurrency = [](char *&prevPtr, char *&p)->bool
{
char *origPrevPtr = prevPtr;
char *origPtr = p;
static const unsigned char CentSymbol = 155;
static const unsigned char PoundSymbol = 156;
static const unsigned char YenYuanSymbol = 157;
bool retVal = false;
if (*p == '$' || *p == '€' || *p == '£' || *p == '¥' || *p == '¢') {
advance(prevPtr, p, 1);
if (isNumber(prevPtr, p)) {
retVal = true;
} else if (*p == TheSpace) {
char *tmpPtr = p;
advance(prevPtr, p, 1);
if (isNumber(prevPtr, p)) {
retVal = true;
} else {
p = tmpPtr;
}
}
} else if(isNumber(prevPtr, p)) {
if (*p == CentSymbol) {
advance(prevPtr, p, 1);
retVal = true;
} else if (isCurrency(prevPtr, p)) {
retVal = true;
} else if (*p == TheSpace) {
char *tmpPtr = p;
advance(prevPtr, p, 1);
if (*p == CentSymbol) {
advance(prevPtr, p, 1);
retVal = true;
} else if(isCurrency(prevPtr, p)) {
retVal = true;
} else {
p = tmpPtr;
}
}
}
if (retVal) {
memset(origPtr, TheSpace, p - origPtr);
*(origPtr + 0) = '#';
*(origPtr + 1) = 'c';
} else {
prevPtr = origPrevPtr;
p = origPtr;
}
return retVal;
};
/////////////////////////////////second function////////////////////////////////////////
static auto isCurrency = [](char *&prevPtr, char *&p)->bool
{
static const string currencies[] = {
"dollars", "dollar", "cents", "cent",
"euros", "euro", "yen", "yuan", "pounds", "pound", "pence",
"usd", "eur", "aud", "cad", "cny",
};
for (const string ¤cy : currencies) {
const string::size_type lenCurrency = currency.length();
if (strncmp(p, currency.c_str(), lenCurrency) == 0) {
if (*prevPtr == TheSpace) {
char *const pEndOfCurrency = p + lenCurrency;
if (*pEndOfCurrency == TheSpace) {
advance(prevPtr, p, lenCurrency);
return true;
}
}
}
}
return false;
};
/////////////////////////////////third function////////////////////////////////////////
static auto isNumber = [](char *&prevPtr, char *&p)->bool
{
bool retVal = false;
if (*p == '-' || *p == '+') {
advance(prevPtr, p, 1);
if (isDigit(prevPtr, p)) {
retVal = true;
for (;;) {
while (isDigit(prevPtr, p)) {}
if (*p == ',') {
advance(prevPtr, p, 1);
continue;
}
break;
}
if (*p == '.') {
advance(prevPtr, p, 1);
while (isDigit(prevPtr, p)) {}
if (*p == 'e') {
advance(prevPtr, p, 1);
if (*p == '-' || *p == '+') {
advance(prevPtr, p, 1);
}
while (isDigit(prevPtr, p)) {}
}
} else if (*p == 'e') {
advance(prevPtr, p, 1);
if (*p == '-' || *p == '+') {
advance(prevPtr, p, 1);
}
while (isDigit(prevPtr, p)) {}
} else if (*p == '/') {
advance(prevPtr, p, 1);
for (;;) {
while (isDigit(prevPtr, p)) {}
if (*p == ',') {
advance(prevPtr, p, 1);
continue;
}
break;
}
}
}
} else if (isDigit(prevPtr, p)) {
retVal = true;
for (;;) {
while (isDigit(prevPtr, p)) {}
if (*p == ',') {
advance(prevPtr, p, 1);
continue;
}
break;
}
if (*p == '.') {
advance(prevPtr, p, 1);
while (isDigit(prevPtr, p)) {}
if (*p == 'e') {
advance(prevPtr, p, 1);
if (*p == '-' || *p == '+') {
advance(prevPtr, p, 1);
}
while (isDigit(prevPtr, p)) {}
}
} else if (*p == 'e') {
advance(prevPtr, p, 1);
if (*p == '-' || *p == '+') {
advance(prevPtr, p, 1);
}
while (isDigit(prevPtr, p)) {}
} else if (*p == '/') {
advance(prevPtr, p, 1);
for (;;) {
while (isDigit(prevPtr, p)) {}
if (*p == ',') {
advance(prevPtr, p, 1);
continue;
}
break;
}
}
}
return retVal;
};
/////////////////////////////////fourth function////////////////////////////////////////
static auto advance = [](char *&prevPtr, char *&p, const size_t offset)->void
{
if (offset == 0) return;
prevPtr = p + (offset - 1);
p = prevPtr + 1;
};
/////////////////////////////////fifth function////////////////////////////////////////
static auto isDigit = [](char *&prevPtr, char *&p)->bool
{
if (*p >= '0' && *p <= '9') {
advance(prevPtr, p, 1);
return true;
}
return false;
};
};