字符串处理问题,对我来说很难的一道题,做了两遍看答案才做出来,坑点如下
1,用left和right将数据分块处理,一个单元一个单元的依次处理;
2,ling的情况,使用flag记录是否存在多余的零
3,如果一个单元没有输出一个字符,则不必输入后边的位,如(800000008)省略万位。
代码如下
#include<algorithm>
#include<cstring>
using namespace std;
char a[12];
char b[12];
char c[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
char wei[5][5]={"Shi","Bai","Qian","Wan","Yi"};
int main(){
scanf("%s",a);
int len=strlen(a);
int left=0,right=len-1;
if(a[0]=='-')
{printf("Fu");
left++;
}
while(left+4<=right)
{ right=right-4;
}
while(left<len)
{ bool flag=false;
bool isprint=false;
while(left<=right){
if(left>0&&a[left]=='0'){
flag=true;}
else{
if(flag==true){
printf(" ling");
flag=false;
}
if(left>0) printf(" ");
printf("%s",c[a[left]-'0']);
isprint=true;
if(left!=right){
printf(" %s",wei[right-left-1]);
}
}
left++;
}
if(isprint==true&&right!=len-1){
printf(" %s",wei[(len-right)/4+2]);
}
right+=4;
}
return 0;
}