将以逗号为间隔的字符串转为数值

开发 前端
今天给小伙伴们带来一套实用的代码,可以将用逗号等字符间隔的字符串转换为数值,这个功能还是有一定的应用价值的,需要的小伙伴可以取用哈!

[[409093]]

 今天给小伙伴们带来一套实用的代码,可以将用逗号等字符间隔的字符串转换为数值,这个功能还是有一定的应用价值的,需要的小伙伴可以取用哈!

阅读过程中有什么问题可以后台交流哈,图片!

1 关于函数功能的说明

1)主要函数介绍

主要函数如下:

① 求m的n次方,拼接数值时用到10的n次方。

② 找到逗号的位置函数。

③ 字符转数值函数。

2)函数功能说明

代码只是实现了将字符转数值,将转换结果打印,小伙伴们在实际使用时可以根据自己需要进行改造。

代码可以指定保留小数点的位数,Str2Num函数中参数dx并没有起到多大效用。

2 实例代码

1)实例代码

说明都在代码注释中了。

#include <stdio.h> 
#include <stdlib.h> 
 
#include <stdint.h> 
#include <string.h> 
 
/* 求m的n次方 */  
uint32_t Pow(uint8_t m,uint8_t n) 

     uint32_t result = 1; 
    
     while(n--) 
     { 
          result *= m;   
     }  
     
     return result; 

 
/* buf中获得第comma个都号的位置 */ 
uint8_t Comma_Pos(uint8_t *buf,uint8_t comma) 
{         
     uint8_t *p = buf; 
  
     while(comma) 
     {    
          // 遇到'*'或者非法字符,则不存在第cx个逗号 
          if(*buf == '*' || *buf < ' ' || *buf > 'z')           
          { 
               return 0xFF; 
          } 
   
          if(*buf == ',')                        // 找到逗号调整逗号数量                                   
          { 
               comma--; 
          } 
   
          buf++; 
    } 
      
    return buf-p;                                // 移动了多少次,就是逗号的位置数                                        

 
/* 将字符串转为数值 */  
uint32_t Str2Num(uint8_t *buf,uint8_t *dx) 

     uint8_t *p = buf; 
     uint32_t ires = 0,fres = 0; 
     uint8_t ilen = 0,flen = 0, i;               // ilen为整数部分长度,flen为小数部分长度 
     uint8_t mask = 0; 
     int res; 
  
     //得到整数和小数的长度 
     while(1)                                     
     { 
          if(*p == '-')                          //是负数 
          { 
               mask |= 0x02; 
               p++; 
          }     
   
          if(*p == ','||(*p == '*'))             //遇到结束了,以逗号或星号为结束符  
          { 
               break;  
          }   
   
          if(*p == '.')                          //遇到小数点了                                
          { 
               mask |= 0x01; 
                p++; 
          }     
          else if( (*p > '9') || (*p < '0') )   //有非法字符 
          {  
               ilen = 0; 
               flen = 0; 
    
               break; 
          }  
          if(mask & 0x01) 
          { 
               flen++;       // 遇到小数点则flen小数长度加1                           
          } 
          else  
          { 
               ilen++;       // 否则整数长度ilen加1                               
          } 
          p++;               // 指向缓冲下个位置 
     } 
  
     if(mask & 0x02)         //去掉负号 
     { 
          buf++;  
     }        
  
     //得到整数部分数据 
     for(i = 0; i < ilen; i++)       
     {   
          ires += Pow(10, ilen-1-i) * (buf[i] - '0'); // buf[0]为最高位数 
     } 
  
     if(flen > 3)                                     //最多取3位小数 
     { 
          flen = 3; 
     }         
  
     //小数点位数 
     *dx = flen;            
      
     //得到小数部分数据 
     for(i = 0; i < flen; i++)       
     {   
          fres += Pow(10, flen-1-i) * (buf[ilen+1+i] - '0'); 
     }  
  
     // 获取完整数据 = 将整数部分*10的小数长度次方 + 小数部分 
     res = ires * Pow(10,flen) + fres;                  
  
     if(mask & 0x02) // 如果是负数,给数据加上负号 
     { 
          res=-res;                           
     }  
  
     return res; 

 
 
int main(int argc, char *argv[])  

     uint8_t i; 
     char ch[100]; 
     uint32_t tmp[3],pos,posx;                      
     
    // 最多取3位小数,第一个数小数只取641 
     strcpy(ch,"-248.6413,148.64,28.64,22.11,");     
  
     /* 将4个字符串转数值并打印 */  
     for(i = 0; i < 4; i++) 
     { 
          posx = Comma_Pos(ch, i); 
  
          tmp[i] = Str2Num(ch + posx, &pos); 
  
          printf("The value %d is: %d\n", i+1, tmp[i]); 
     } 
 
     return 0; 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.

2)运行结果

本文转载自微信公众号「嵌入式杂牌军」,作者釜薪君。转载本文请联系嵌入式杂牌军公众号。 

 

责任编辑:武晓燕 来源: 嵌入式杂牌军
相关推荐

2009-08-28 10:39:37

C#数值字符串

2021-09-17 14:13:28

JavaScript编程字符串

2009-12-01 14:00:37

PHP字符串转换为数值

2009-08-20 11:29:21

C#16进制字符串

2010-09-09 11:48:00

SQL函数字符串

2024-04-01 08:41:39

字符串.NET

2021-03-08 08:23:24

Java字符串截取

2010-06-28 15:18:51

SQL Server

2009-06-23 14:13:00

Java字符串

2010-11-26 09:51:54

MySQL字符串

2011-08-10 18:47:18

Cocoa字符串

2014-01-02 16:14:10

PostgreSQL字符串

2023-01-11 16:49:13

MySQL数据库

2009-07-16 17:01:09

Swing字符串

2013-05-06 10:54:08

字符串字符串匹配KMP算法

2023-12-15 10:27:01

暴力匹配算法Python字符串

2023-02-26 22:33:32

字符串排列算法

2021-05-18 09:08:18

字符串子串对象

2010-09-13 15:12:26

sql server字

2010-10-12 11:13:51

点赞
收藏

51CTO技术栈公众号