1. /** 
  2.  * 格式化输出字符串 
  3.  *       
  4.  * 
  5.  *      输入    |      输出 
  6.  *----------------|--------------------- 
  7.  *      空        |      $0.00 
  8.  *      1         |     $0.01 
  9.  *      12        |     $0.12 
  10.  *      123       |     $1.23 
  11.  *      1234      |     $12.34 
  12.  *      12345     |     $123.45 
  13.  *      123456    |     $1,234.56 
  14.  *      1234567   |     $12,345.67 
  15.  *      12345678  |     $123,456.78 
  16.  *      123456789 |     $1,234,567.89 
  17.  * ---------------|--------------------- 
  18.  * 
  19.  * 
  20.  * @file format_1.c 
  21.  * @brief    
  22.  * @author struggleLinux@gmail.com 
  23.  * @version 1.0 
  24.  * @date 2011-05-10 
  25.  */ 
  26.  
  27. #include <stdio.h> 
  28. #include <string.h> 
  29.  
  30.  
  31. /** 
  32.  *美元货币转换 
  33.  * @brief   dollars  
  34.  * 
  35.  * @param   dest 
  36.  * @param   src 
  37.  */ 
  38. void  dollars( char *dest ,char const *src ); 
  39.  
  40.  
  41. int main() 
  42.     char src[20] ; 
  43.     char dest[20] ; 
  44.     char * str; 
  45.      
  46.     str = src; 
  47.  
  48.     loop:puts("请输入数字:"); 
  49.      
  50.     scanf("%s",src); 
  51.      
  52.     if( strlen(src) > 20 ){ 
  53.         puts("字符串的长度不能大于20!"); 
  54.         goto loop; 
  55.     } 
  56.  
  57.     while( *str != '\0'  ){ 
  58.         if( !isdigit(*str) ){ 
  59.             puts("请填写正确格式!"); 
  60.             goto loop; 
  61.         } 
  62.         str++; 
  63.     } 
  64.      
  65.     dollars(dest,src); 
  66.     printf("$%s\n",dest); 
  67.     return 0; 
  68.  
  69.  
  70. void dollars( char *dest ,char const *src ) 
  71.     int lenght,i,k ; 
  72.     char * start,temp; 
  73.      
  74.     start = dest; 
  75.     lenght = strlen(src); 
  76.  
  77.     if( lenght < 3 ){ 
  78.         //格式化长度小于3的数字字符串 
  79.         for( k = 0 ;k < 2 ;k++ ){ 
  80.              
  81.             if(*(src+lenght-k-1) == '\0'
  82.                 *start++ = '0'
  83.             else 
  84.                 *start++ = *(src+lenght-k-1); 
  85.  
  86.             if( k == 1 ){ 
  87.                 *start++ = '.'
  88.                 *start++ = '0'
  89.             } 
  90.         } 
  91.  
  92.     }else
  93.          
  94.         //'.'、',' 的插入判断 
  95.         for(i = 1 ; i <= lenght ; i++ ){ 
  96.             if( i==2 ) { 
  97.                 *start++ = *(src +lenght -i); 
  98.                 *start++ = '.'
  99.             }else if( (i-2)%3 == 0 ){ 
  100.                 *start++ = *(src + lenght -i); 
  101.                 if( i != lenght) 
  102.                     *start++ = ','
  103.             }else 
  104.                 *start++ = *(src + lenght - i); 
  105.         } 
  106.     } 
  107.     *start = '\0'
  108.  
  109.     //倒序     
  110.     while( start > dest ){ 
  111.         temp   = *--start; 
  112.         *start = *dest; 
  113.         *dest++ = temp; 
  114.     }