1. /** 
  2.  * 根据格式字符串转换数字字符串 
  3.  *   
  4.  *  格式字符转       数字字符串        结果格式字符串 
  5.  *  --------------------------------------------------------------------- 
  6.  *  #####            12345          12345 
  7.  *  #####            123            __123 
  8.  *  ##,###           1234           _1,234 
  9.  *  ##,###           123            ___123 
  10.  *  ##,###           1234567        34,567 
  11.  *  #,###,###.##     123456789      1,234,567.89 
  12.  *  #,###,###.##     1234567        ___12,345.67 
  13.  *  #,###,###.##     123            ________1.23 
  14.  *  #,###,###.##     1              ________0.01 
  15.  *  #####.#####      1              ____0.00001 
  16.  *  ----------------------------------------------------------------------- 
  17.  *  '_' 表示 空白 
  18.  * 
  19.  * @file format_2.c 
  20.  * @brief    
  21.  * @author struggleLinux@gmail.com 
  22.  * @version 1.0 
  23.  * @date 2011-05-12 
  24.  */ 
  25.  
  26. #include <stdio.h> 
  27. #include <string.h> 
  28.  
  29.  
  30.  
  31. /** 
  32.  * 格式化方法 
  33.  * 
  34.  * @brief   format  
  35.  * 
  36.  * @param   format_string 
  37.  * @param   digit_string 
  38.  * 
  39.  * @return   
  40.  */ 
  41. int format( char *format_string , char const *digit_string ); 
  42.  
  43. int  main() 
  44.     char format_string[30]; 
  45.     char digit_string[30]; 
  46.     char *digit_temp ,*format_temp; 
  47.  
  48.     format_temp = format_string; 
  49.     digit_temp  = digit_string ; 
  50.  
  51.     puts("请输入格式字符串 ! 例如 ##,###"); 
  52.     scanf("%s",format_string); 
  53.     puts("请输入一串数字! 例如 12345"); 
  54.     scanf("%s",digit_string); 
  55.  
  56.     while( *format_temp != '\0'){ 
  57.         format_temp++; 
  58.     } 
  59.  
  60.     while(  *digit_temp != '\0' ) 
  61.         digit_temp++; 
  62.      
  63.     if( format( format_string ,digit_string ) == 0 ) 
  64.         puts("格式化错误!"); 
  65.     else 
  66.         printf("%s\n", format_string ); 
  67.      
  68.     return 0; 
  69.  
  70. int format( char * format_string , char const * digit_string ) 
  71.     int format_len ,  
  72.         digit_len , 
  73.         flag = 0 ,     //标记"." 
  74.         point_flag = 0; //判断是否存在"." 
  75.     char  temp ; 
  76.  
  77.     if( *format_string == '\0' || *digit_string == '\0'){ 
  78.         return 0; 
  79.     } 
  80.  
  81.     //判断是否存在"."  
  82.     if( strrchr(format_string ,'.') ) 
  83.         point_flag = 1; 
  84.  
  85.  
  86.     //获得字符串的长度 
  87.     format_len = strlen( format_string); 
  88.     digit_len  = strlen( digit_string ); 
  89.  
  90.  
  91.     //格式化format_string 
  92.     while( format_len >= 1  ){ 
  93.         if( *(format_string+format_len -1) == '.' ){ 
  94.                 format_len--; 
  95.                 flag += 1; 
  96.         } 
  97.         if(digit_len >= 1 ){ 
  98.             if( *(format_string+format_len-1) == ',' ){ 
  99.                 format_len--; 
  100.             } 
  101.             *(format_string+format_len -1) = *(digit_string+digit_len -1); 
  102.         }else
  103.             if( flag == 1 ){ 
  104.                 flag++; 
  105.                 *(format_string+format_len -1) =  '0'
  106.             }else if( point_flag ==1 && flag == 0 ) 
  107.                 *(format_string+format_len -1) = '0'
  108.             else 
  109.                 *(format_string+format_len -1) = ' '
  110.         } 
  111.         digit_len--; 
  112.         format_len--; 
  113.     } 
  114.     return 1;