- /**
- * 根据格式字符串转换数字字符串
- *
- * 格式字符转 数字字符串 结果格式字符串
- * ---------------------------------------------------------------------
- * ##### 12345 12345
- * ##### 123 __123
- * ##,### 1234 _1,234
- * ##,### 123 ___123
- * ##,### 1234567 34,567
- * #,###,###.## 123456789 1,234,567.89
- * #,###,###.## 1234567 ___12,345.67
- * #,###,###.## 123 ________1.23
- * #,###,###.## 1 ________0.01
- * #####.##### 1 ____0.00001
- * -----------------------------------------------------------------------
- * '_' 表示 空白
- *
- * @file format_2.c
- * @brief
- * @author struggleLinux@gmail.com
- * @version 1.0
- * @date 2011-05-12
- */
- #include <stdio.h>
- #include <string.h>
- /**
- * 格式化方法
- *
- * @brief format
- *
- * @param format_string
- * @param digit_string
- *
- * @return
- */
- int format( char *format_string , char const *digit_string );
- int main()
- {
- char format_string[30];
- char digit_string[30];
- char *digit_temp ,*format_temp;
- format_temp = format_string;
- digit_temp = digit_string ;
- puts("请输入格式字符串 ! 例如 ##,###");
- scanf("%s",format_string);
- puts("请输入一串数字! 例如 12345");
- scanf("%s",digit_string);
- while( *format_temp != '\0'){
- format_temp++;
- }
- while( *digit_temp != '\0' )
- digit_temp++;
- if( format( format_string ,digit_string ) == 0 )
- puts("格式化错误!");
- else
- printf("%s\n", format_string );
- return 0;
- }
- int format( char * format_string , char const * digit_string )
- {
- int format_len ,
- digit_len ,
- flag = 0 , //标记"."
- point_flag = 0; //判断是否存在"."
- char temp ;
- if( *format_string == '\0' || *digit_string == '\0'){
- return 0;
- }
- //判断是否存在"."
- if( strrchr(format_string ,'.') )
- point_flag = 1;
- //获得字符串的长度
- format_len = strlen( format_string);
- digit_len = strlen( digit_string );
- //格式化format_string
- while( format_len >= 1 ){
- if( *(format_string+format_len -1) == '.' ){
- format_len--;
- flag += 1;
- }
- if(digit_len >= 1 ){
- if( *(format_string+format_len-1) == ',' ){
- format_len--;
- }
- *(format_string+format_len -1) = *(digit_string+digit_len -1);
- }else{
- if( flag == 1 ){
- flag++;
- *(format_string+format_len -1) = '0';
- }else if( point_flag ==1 && flag == 0 )
- *(format_string+format_len -1) = '0';
- else
- *(format_string+format_len -1) = ' ';
- }
- digit_len--;
- format_len--;
- }
- return 1;
- }