注意点:
1.四个数字分一段,从右到左开始分。
代码如下:将两者集中到这一段上。
left=0, right=strlen(str)-1
while(left+4<=right)
{
right-=4;
}
之后right依次加4。
2.对于每一段的处理,遇到‘0’积累,直到非‘0’,则打印一个" ling".并打印数字,在数字前打印空格。需要特殊处理的是第一个,left=0的时候,所以有以下情况。:
if(left>0&&str[left)=='0') flag=true;
else
{
if(left) printf(" "); //left 考虑到正数第一个数字前不需要空格
printf("%s",ch[str[left]-'0']); //打印字符
if(left!=right) printf(" %s",wi[right-left-1]); //打印位
}
3.比较字符串相等
strcmp(str,“123”)
1>相等返回0
2>大于返回一个正数
3>小于返回一个负数
#include<bits/stdc++.h>
using namespace std;
char ch[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
char wi[5][10]={"Shi","Bai","Qian","Wan","Yi"};
int main()
{
char str[10];
scanf("%s",str);
int len=strlen(str);
int right=len-1,left=0;
if(str[0]=='-')
{
printf("Fu");
left++;
}
while(left+4<=right) right-=4;
while(left<len)
{
bool flag=false,isprint=false;
while(left<=right)
{
if(left>0&&str[left]=='0') flag=true;
else
{
if(flag)
{
printf(" ling");
flag=false;
}
if(left>0) printf(" ");
isprint=true;
printf("%s",ch[str[left]-'0']);
if(left!=right) printf(" %s",wi[right-left-1]);
}
left++;
}
if(isprint&&(len-left)>=4)
printf(" %s",wi[(len-left)/4+2]);
right+=4;
}
return 0;
}