65,190
社区成员




int decode(string m_string)
#include <stdio.h>
#include <assert.h>
#include <ctype.h>
/*
** 功能:返回字符ch对应的数字,
** 输入ch必须为digit,否则结果未知
** 返回:对应的数字
*/
char CharToDigit(char ch)
{
return (ch-'0');
}
/*
** 功能:对字符串str中的中文描述数字方式转换为数字并返回.
*/
unsigned long decode(const char *str)
{
unsigned long ldat = 0; //存储转换后的值,进行累加,并且返回该值
unsigned long datTmp = 0; //存储中间在乘以万或者亿之前的值
char nTmp = 0; //存储读入的单个数字
char *pTmp = (char *)str;
assert(str != NULL);
while(*pTmp != '\0')
{
if (isdigit(*pTmp)) //处理数字
{
nTmp = CharToDigit(*pTmp);
pTmp++;
if ((*pTmp == 'w') || (*pTmp == 'y') || (*pTmp == 0)) //如果下一位为万亿或者最后的个位,将数字加到临时的个位上
{
datTmp += nTmp;
}
continue;
}
switch (*pTmp)
{
case 's': //十
datTmp += nTmp * 10;
break;
case 'b': //百
datTmp += nTmp * 100;
break;
case 'q': //千
datTmp += nTmp *1000;
break;
case 'w': //万
ldat += datTmp * 10000;
datTmp = 0;
break;
case 'y': //亿
ldat += datTmp * 100000000;
datTmp = 0;
break;
default:
printf("\n input error! \n");
break;
}
pTmp++;
}
ldat += datTmp;
return ldat;
}
int main(int argc, char* argv[])
{
printf("\n %d \n",decode("1s1y3q2sw5q6b3s4"));
return 0;
}
int Atoi(char *str)
{
static char strArrBase['z'-'a'+2]={0};
static int iArrBase[]={1,10,100,1000,10000,100000000};
strArrBase['s'-'a']=1;
strArrBase['b'-'a']=2;
strArrBase['q'-'a']=3;
strArrBase['w'-'a']=4;
strArrBase['y'-'a']=5;
int sum = 0;
int i=0;
bool bCalc = false;
while(*str!='\0')
{
if (*str>='0'&&*str<='9')
{
i = *str -'0';
}
else
{
sum += i* iArrBase[strArrBase[*str - 'a']];
i=0;
}
++str;
}
sum+=i;
return sum;
}
#include <iostream>
using namespace std;
int analyze(string s)
{
int reVal = 0;
int temp=0;
int tens = 1;
bool isInt = false;
for(int i =0; i<(int)(s.length());i++)
{
if(s[i]>='0'&&s[i]<='9')
{
temp= s[i]-(int)'0';
isInt = true;
}
else
{
switch (s[i])
{
case 's':
tens = 10;
isInt = false;
break;
case 'b':
tens = 100;
isInt = false;
break;
case 'q':
tens = 1000;
isInt = false;
break;
default:
tens = 1;
break;
}
temp *= tens;
}
if(!isInt||i==(int)(s.length()-1))
reVal+=temp;
}
return reVal;
}
int decode (string s)
{
int reVal = 0;
string ys, ws, gs=s;
bool isYcontained = false;
bool isWcontained = false;
int yPosition = 0;
int i=0;
while(s[i]!='\0')
{
if(s[i]=='y')
{
isYcontained = true;
yPosition = i;
ys = s.substr(0,yPosition);
gs = s.substr(i);
}
if(s[i] =='w')
{
isWcontained = true;
ws = s.substr(yPosition,i-yPosition);
gs = s.substr(i+1);
}
i++;
}
reVal = analyze(gs);
if(isYcontained)
{
reVal += analyze(ys)*100000000;
}
if(isWcontained)
{
reVal +=analyze(ws)*10000;
}
return reVal;
}
int main()
{
cout <<decode("1s2")<<"\n"<<decode("1s3w")<<"\n"<<decode("2sw2q")<<"\n"<<decode("4b03")<<"\n"<<decode("4b3s")<<"\n"<<decode("1s2y9b2sw8q9s");
system("pause");
return 0;
}
/*写一个函数,形如 int decode(string){} 将中文里对数字的描述转化成int输出。
分别用“sbqwy”表示中文里的“十百千万亿”,如输入一个“3q7b6s2”输出3762.只有20分钟,你能写出什么样的程序呢。
*/
int decode( string str )
{
int ret = 0;
int nPriDigit = 0;
int nPriUnit = 1;
for( int i = 0 ;i < str.length(); i++)
{
char cUnit = str.at(i);
if( cUnit >= '0' && cUnit <='9' )
{
nPriDigit = cUnit - '0';
}
else
{
int nUnit = 0;
switch( cUnit )
{
case 's':
nUnit = 10;
break;
case 'b':
nUnit = 100;
break;
case 'q':
nUnit = 1000;
break;
case 'w':
nUnit = 10000;
break;
case 'y':
nUnit = 100000000;
break;
default:
break;
}
if( nPriUnit != 0 && nUnit > nPriUnit )
ret *= nUnit;
ret += nPriDigit * nUnit;
nPriUnit = nUnit;
nPriDigit = 0;
}
}
ret += nPriDigit;
return ret;
}
int main(int argc, char *argv[])
{
string str = "7b2s5wl5bl3";
cout << decode(str) << endl;
system("PAUSE");
return 0;
}
typedef struct __CharWeight {
char c;
int weight;
} CharWeight;
const CharWeight gCharWeightTable[] = {
{ 'y', 10000*10000 },
{ 'w', 10000 },
{ 'q', 1000 },
{ 'b', 100 },
{ 's', 10 },
{ '\0', 1}
};
int findWeight(char c)
{
static int iloop = 0; // 强制按数量级从大到小排列
while( gCharWeightTable[iloop].c!='\0' && gCharWeightTable[iloop].c!=c )
++iloop;
return gCharWeightTable[iloop].weight;
}
int decode(const char* str)
{
const char *next = str;
int field_value = 0;
int final_value = 0;
int sign = 1;
if( *next=='-' ) // 支持负数
{
sign = -1;
++next;
}
while( *next!='\0' )
{
while( *next>='0' && *next<='9' ) // 得到一个field
{
field_value += 10*field_value + (*next-'0');
++next;
}
final_value += field_value*findWeight(*next);
field_value = 0;
if( *next )
++next;
}
final_value *= sign;
return final_value;
}