C和指针7.11.6

来源:互联网 发布:iphone和mac airplay 编辑:程序博客网 时间:2024/06/05 00:32
#include <iostream>#include <string.h>   //调用了memset()和memcpy()两个函数using namespace std;char number_low[][10]={"zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen" };char number_high[][10]={"","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"}; char number_class[][10]={"hundred","thousand","million","billion"};  //二维数组,每一行存10个字符  int write_3(unsigned int num,char *buffer_3){    unsigned int part[3]={0,0,0};    int i,seek=0;    short cnt=2;    char *current=buffer_3;    if(num>1000)    {        cout <<"wrong number" <<endl;        return 0;    }    while(num>0)    {        part[cnt--]=num%10;        num/=10;    }    for(i=0;i<3;i++)    {        switch(i)        {        case 0:                                                      //百位            if(part[i]==0)                break;                                               //break:跳到switch语句列表的末尾            memcpy(current,number_low[part[i]],strlen(number_low[part[i]]));            current+=strlen(number_low[part[i]]);            *current='\0';            current++;            memcpy(current,number_class[0],strlen(number_class[0]) );//函数原型:void *memcpy(void *dest,const void *src,size_t n);从源src//所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中            current+=strlen(number_class[0]);current++;*current = '\0';            break;        case 1:                                                   //十位            if(part[i]==0||part[i]==1)                              //十位为0或者1,都由个位输出                break;            memcpy(current,number_high[part[i]-1],strlen(number_high[part[i]-1]));            current+=strlen(number_high[part[i]-1]);            if(part[i+1]!=0)                               //当个位不为0,加符号            {                *current='-';                current++;            }            break;        case 2:                                                  //个位            if(part[i]==0&&part[i-1]!=1)                                       break;            if(part[i-1]!=1)                                   //十位不是1的情况            {                memcpy(current,number_low[part[i]],strlen(number_low[part[i]]));                current+=strlen(number_low[part[i]]);                *current='\0';                current++;            }            else                                              //十位是1的情况            {                memcpy(current,number_low[part[i]+10],strlen(number_low[part[i]+10]));                current+=strlen(number_low[part[i]+10]);                *current='\0';                current++;            }            break;        default:            cout << "error "<<endl;            break;        }    }    return seek=current-buffer_3; }  void written_amount(unsigned int amount,char *buffer){    unsigned int part[10];    char *current=buffer;    int seek;    short cnt=0;    while(amount>0)    {        part[cnt++]=amount%1000;        amount/=1000;    //    cout << part[cnt-1]<<endl;    }    for(int i = cnt-1;i>=0;i--)    {        seek=write_3(part[i],current);                   current+=seek;        if(0<i&&i<4)        {            memcpy(current,number_class[i],strlen(number_class[i]) );            current+=strlen(number_class[i]);            *current='\0';            current++;        }        else if(i>=4)        {            cout <<"rich man,We can't caculate so much money!" <<endl;            break;        }             }}  int  main() {     char *buffer;    unsigned int amount;    buffer=(char *)malloc(200*sizeof(char));    memset(buffer,0,200);//初始化:函数原型为void *memset(void *s,int ch,size_t n);将s中前n个字节用//ch替换并返回s    while(1)    {        cout <<"Please input the count:" <<endl;        cin>>amount;        written_amount(amount,buffer);        cout<<amount << "in English is:";        for(int i=0; i < 200 ;i++) cout <<buffer[i];        cout<<endl;memset(buffer,0,200);    }    return 0;}

0 0
原创粉丝点击