日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言字符串数字提取函数,支持负数、浮点数、科学记数法

發(fā)布時(shí)間:2023/12/9 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言字符串数字提取函数,支持负数、浮点数、科学记数法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 效果
    • 普通數(shù)字
    • 小數(shù)
    • 科學(xué)記數(shù)法
  • 源碼

平臺(tái):
STC89C52
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0


效果

這里以51單片機(jī)為例,對(duì)串口接收的字符串中的第三個(gè)數(shù)進(jìn)行解碼:

普通數(shù)字

小數(shù)


科學(xué)記數(shù)法




源碼

/* * Str2Num.h * * Created on: 2021/11/6 * Author: 乙酸氧鈹 */#ifndef STR2NUM_H_ #define STR2NUM_H_#include "stdint.h"/* str:數(shù)字字符串首地址 flag:分隔符 no:第no個(gè)數(shù)字 從1開始計(jì) Output: 輸出結(jié)果 */extern void str2int(char * str, char flag, int32_t no, int32_t *Output); extern void str2double(char * str, char flag, int32_t no, double *Output);#endif /* STR2NUM_H_ */ /* * Str2Num.c * * Created on: 2021/11/6 * Author: 乙酸氧鈹 */ #include "Str2Num.h"void str2int(char * str, char flag, int32_t no, int32_t *Output) {int32_t id_end, count, output;for (id_end = 0, count = 0; count != no; ++id_end){if (str[id_end] == flag || str[id_end] == '\r' || str[id_end] == '\n' || str[id_end] == '\0')++count;}id_end -= 2;for (output = 0, count = 1; str[id_end] != flag && id_end >= 0; --id_end){ if (str[id_end] == '-')output *= -1;else if (str[id_end] == '+');else {output += (str[id_end] - '0') * count;count *= 10;}}*Output = output; }void str2double(char * str, char flag, int32_t no, double *Output) {int32_t id_end, id_dot, id_e, count, id, pow;double output;for (id_end = 0, count = 0; count != no; ++id_end){if (str[id_end] == flag || str[id_end] == '\r' || str[id_end] == '\n' || str[id_end] == '\0')++count;}id_end -= 2; //尋找最后一個(gè)數(shù)字的下標(biāo)for (id_dot = id_end, id_e = -1; str[id_dot] != '.'; --id_dot){if (str[id_dot] == 'e' || str[id_dot] == 'E')id_e = id_dot; //標(biāo)記e的下標(biāo)if (str[id_dot] == flag || str[id_dot] == '\r' || str[id_dot] == '\n' || str[id_dot] == '\0'){if(id_e > 0)id_dot = id_e;elseid_dot = id_end + 1; break;}}output = 0;if (str[id_dot] == '.'){for (count = 10, id = id_dot + 1; str[id] != flag && str[id] != '\r' && str[id] != '\n' && str[id] != '\0' && str[id] != 'e' && str[id] != 'E'; ++id){output += (str[id] - '0') / (double)count; //加入小數(shù)部分count *= 10;}}for (count = 1, id = id_dot - 1; str[id] != flag && id >= 0; --id){if (str[id] == '-')output *= -1;else if (str[id] == '+');else{output += (str[id] - '0') * count;count *= 10; //加入整數(shù)部分}}if(id_e > 0) //指數(shù)計(jì)算{ for (pow = 0, count = 1; id_end != id_e; --id_end){if (str[id_end] == '+');else if (str[id_end] == '-')pow *= -1;else { pow += (str[id_end] - '0') * count;count *= 10;}}if (pow > 0)while (pow--)output *= 10;else if(pow < 0)while (pow++)output /= 10;}*Output = output; }

總結(jié)

以上是生活随笔為你收集整理的C语言字符串数字提取函数,支持负数、浮点数、科学记数法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。