1082. Read Number in Chinese (25)-字符串处理

题意就是给出9位以内的数字,按照汉子的读法读出来。

读法请看下方的几个例子:

5 0505 0505 伍亿零伍佰零伍万零伍佰零伍

5 5050 5050 伍亿伍仟零伍拾万伍仟零伍拾  (原本我以为这个是读:伍亿伍仟零伍拾万"零"伍仟零伍拾)

5 0550 0055 伍亿零伍佰伍拾万零伍拾伍

5 5005 5500 伍亿伍仟零伍万伍仟伍佰

5 5500 0055 伍亿伍仟伍

按四位四位的分开处理,具体见代码~

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
char number[15];
bool first=true;
char str1[3][10]={"Fu","Yi","Wan"};
char str2[4][10]={"","Shi","Bai","Qian"};
char digit[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};

/*
cnt表示该位的右边还剩下left-1位(包括该位)
read是4位4位的读
*/
void read(int idx,int left){
    if(left==0)
        return;
    if(number[idx]=='0'){
        bool allZero=true; //判断接下来的是否都是0,若都是就不需要读ling
        int cnt=0;
        for(int i=idx;i<idx+left;i++){
            if(number[i]!='0'){
                allZero=false;
                break;
            }
            else
                cnt++;
        }
        if(!allZero){
            printf(" ling");
            read(idx+cnt,left-cnt);
        }
    }
    else{
        if(!first)
            printf(" ");
        else
            first=false;
        printf("%s",digit[number[idx]-'0']);
        if(left>1)
            printf(" %s",str2[left-1]);
        read(idx+1,left-1);
    }
}
int main()
{
    first=true;
    scanf("%s",number);
    int len=strlen(number);
    int left=len;
    int idx=0;
    int a=atoi(number);
    //注意0这个特例!!!,没有考虑这个导致WA
    if(a==0){
        printf("ling");
        return 0;
    }
    if(number[0]=='-'){
        first=false;
        printf("Fu");
        left--;
        idx++;
    }
    if(left>=9){
        if(!first){
            printf(" ");
        }
        else
            first=false;
        printf("%s",digit[number[idx]-'0']);
        printf(" Yi");
        left--;
        idx++;
    }
    //万位上的四位
    if(5<=left && left<=8){
        read(idx,left-4);
        idx+=left-4;
        left=4;
        printf(" Wan");
    }
    //低位上的四位
    if(1<=left<=4){
        read(idx,left);
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/chenxiwenruo/p/6390129.html