1. 程式人生 > >C語言程式設計實現,浮點型與字元陣列相互轉化

C語言程式設計實現,浮點型與字元陣列相互轉化

歡迎轉載,請註明出處,本文地址:http://blog.csdn.net/jk050802/article/details/8628764

聯絡郵箱:[email protected]

簡介

         從浮點型轉換為字元型:這裡比較簡單,只需要用到sprintf即可。sprintf(str,"%f",dou_num);

         從字元型轉換為浮點型:這裡也比較簡單,只用sscanf即可。例如:sscanf(str,"%lf",&res_dou_num);

         之前沒有想到這個sscanf函式,因此下面把字元型轉換為浮點型的函式是自己寫的。

把一個字元型表示的數字轉換為實際上的數字,根據ASSIC表,把字元型表示的數字減去48即可。

         而浮點型有點特殊,要分為小數點之前和小數點之後來處理。

小數點之前:通過迴圈,從左向右讀,將左邊已有的數乘以10,再加上後面右邊的數。

小數點之後:通過遞迴,從右向左讀,將右邊已有的數除以10,再加上左邊的數。

總結

         這裡可以看出迴圈與遞迴的區別,有時候想把迴圈時候操作的順序反過來,可以採用遞迴來實現。

         對於字元陣列,它會有一個str_ptr指標,這個指標代表現在讀到字元型陣列的那個字元上去。假如在子函式dou_post等對其進行str_ptr++,這是不會讓實際的str_ptr增加1,雖然這個是一個指標,但是這個只是形參,而不是實參,因此不會增加1。假如想讓str_ptr加1,那麼就要傳遞str_ptr的地址給子函式dou_post,即引數應該是**str_ptr。

示例程式碼

#include<stdio.h>

#defineMAX_BUFFER 100

#defineNONE 0

#defineHAVE 1

staticint dou_post(char **str_ptr)

{

        int post_num = 0;

        while((**str_ptr >='0')&&(**str_ptr <= '9')){

                post_num = post_num * 10;

                post_num += (**str_ptr - 48);

                (*str_ptr)++;

        }

        if(**str_ptr == '.') (*str_ptr)--;

        return post_num;

}

staticdouble dou_point(char **str_ptr)

{

        double point_num = 0;

        if((**str_ptr >='0')&&(**str_ptr <= '9')){

                point_num = **str_ptr - 48;

                (*str_ptr)++;

                if((**str_ptr >='0')&&(**str_ptr <= '9')){

                        point_num += dou_point(str_ptr);

                }

        }

        if(**str_ptr == '\0') (*str_ptr)--;

        return point_num / 10;

}

staticdouble str_to_dou(char *str_ptr)

{

        int post_num = 0;

        double point_num = 0;

        int point_flag = NONE;

        while(*str_ptr != '\0'){

                if(*str_ptr == '.')

                        point_flag = HAVE;

                else if(point_flag == NONE)

                        post_num =dou_post(&str_ptr);

                else if(point_flag == HAVE)

                        point_num =dou_point(&str_ptr);

                str_ptr++;

        }

        return (double)post_num + point_num;

}

intmain()

{

        double dou_num;

        char str[MAX_BUFFER];

        double res_dou_num;

        dou_num = 12546.697017;

        printf("the double number is%f\n",dou_num);

        sprintf(str,"%f",dou_num);

        printf("from double to string,result is %s\n",str);

                   //sscanf(str,"%lf",&res_dou_num);

        res_dou_num = str_to_dou(str);

        printf("from string to double,result is %f\n",res_dou_num);

}

執行結果

[[email protected]]# ./test

thedouble number is 12546.697017

fromdouble to string, result is 12546.697017

fromstring to double ,result is 12546.697017


相關推薦

C語言程式設計實現字元陣列相互轉化

歡迎轉載,請註明出處,本文地址:http://blog.csdn.net/jk050802/article/details/8628764 聯絡郵箱:[email protected] 簡介          從浮點型轉換為字元型:這裡比較簡單,只需要用

C語言學習總結:在記憶體中的儲存

我們都知道,對於整形來說,資料存放記憶體中存放的是補碼。但是對於浮點型來說,在記憶體中存放的是否也是補碼呢? 舉個例子: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { i

MFC中CString類字串長整字元陣列char資料之間的相互轉換

一、長整型資料與CString類字串相互轉換 1.將長整型資料轉換為CString字串類 CString str; long ld; str.Format(_T("%ld"),ld); 2.將CString字串類轉換為長整型資料 CString str; long ld; ld=

C語言基礎知識筆記:day4字串字元陣列

注:本筆記為直接上傳,因各個markdown筆記語法的差異性,在顯示上略有區別。 如需原版請聯絡:[email protected]。(郵件主題為:學習筆記,正文需要的筆記名,可以直接複製該筆記的網址)。同時歡迎各位一起學習交流。 day4字串與字元陣

java 字串字元陣列相互轉化字串位元組陣列相互轉化

package com.liuxd; /** * Created by Liuxd on 2018-11-02. */ public class TestString { public static void main(String[] args) throws Exception

5. C語言基本資料型別及構造資料型別儲存規則及記憶體模型

  其實學習C語言的時候有一件很頭疼的事就是各種各樣的資料型別,不同的場合不同的用途不同的資料要使用不同的資料型別,那又為什麼要分出這麼多種型別呢,因為型別決定了開闢空間的大小,開闢空間的大小又決定了儲存的範圍。今天,就資料型別這個問題我們來掰扯掰扯。   C

計算位數最高達300位的兩個非負整數的乘積C語言程式設計實現

-------世界太蕪雜,我幫你整理---- -------C語言大數相乘運算---------- 今天我們要程式設計實現的是兩個超長整型資料進行相乘,並輸出結果 比如: 2134897427972647678 * 3497892374 我們先來看看執行效果

C 基礎 (整形字元

 整形常量 C的整形常量有三種表示方式,即十進位制整數,八進位制整數和十六進位制整數。 十進位制數:一串連續的數字表示,最高位非零。 八進位制數:以數字零開頭。 十六進位制數:以數字零和字母x開頭,a-f不區分大小寫。 零既是十進位制又是八進位制。 整形變數又分有符號和無符號

詳解!C語言程式設計實現小遊戲“三子棋”

今天我們來程式設計實現一個充滿童趣的小遊戲“三子棋” 先來說一下三子棋的規則: 三子棋又叫九宮棋、圈圈叉叉、一條龍等。 將正方形對角線連起來,或相對兩邊依次擺上三個雙方棋子, 總之只要將自己的三個棋子走成一條線, 對方就算輸了。 不用再過多解釋了,相信大家一定都玩過! 那麼,該

課上補做:用C語言程式設計實現ls命令

課上補做:用C語言程式設計實現ls命令 一、有關ls ls :用來列印當前目錄或者制定目錄的清單,顯示出檔案的一些資訊等。 ls -l:列出長資料串,包括檔案的屬性和許可權等資料 ls -R:連同子目錄一同顯示出來,也就所說該目錄下所有檔案都會顯示出來 ls -a:可以將目錄下的全部檔案

離散數學真值表(c語言程式設計實現

程式碼如下: 廢話不多說: 主要利用二進位制的轉化實現  #include <iostream> #include <math.h> using namespace std; void shuru(char *p,int s); void shu

KST-51微控制器:c語言程式設計實現數碼管動態顯示秒錶的倒計時

/*60S倒計時*/ /*個位每1S變一次,從0~9*/ /*十位,個位為0的下一秒十位發生變化*/ #include<reg52.h> sbit ADDR0=P1^0; sbit ADDR1=P1^1; sbit ADDR2=P1^2; sbit ADDR3

C程式設計實現20塊買汽水智力問題

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int Find(int n) { int i = 0; int ret = 1; if (0 == n) { return 0; } else

C程式設計實現一個數組中只有兩個數不是成對出現找出這兩個數

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> void Find(int *arr, int sz, int *p1, int *p2) { int num = 0; int i

C程式設計實現strcat函式最完善程式碼如果不是請大神留言

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <assert.h> #include <string.h> char *My_strcat(c

python 字串和整數互相轉換

轉載:http://www.cnblogs.com/chenfulin5/p/7813791.html 在程式設計當中,經常要用到字串的互相轉換, 現在記錄 python 裡面的字串和整數是怎麼轉換的。 int(str) 函式將 符合整數的規範的字串 轉換成 int 型。

python 判斷是否為數字(整

#!/usr/bin/python # -*- coding:utf-8 -*- import sys import math # 判斷是否為數字 def isNum(value): try: value + 1 excep

C語言實現bool(布林變數)

C語言中,本身沒有bool(布林型變數)。但是我們可以用其他方式來模擬。一、如果簡單的使用char、int、long變數來表示0/1,則太浪費空間了。二、這裡介紹一種巧妙的方式實現bool,高空間利用率。#define true 1 #define false 0 //--

C語言程式設計給定一個日期輸出這個日期是該年的第幾天

/** C語言程式設計題 給定一個日期,輸出這個日期是該年的第幾天 */ int getIndexOfDay(int year, int month, int day) { int months[12] = {31, 28, 31, 30, 31, 30

C語言程式設計——9預處理命令

    以“#”開頭的預處理命令一般都放在函式之外,而且一般放在原始檔前面,他們成為預處理部分。    預處理指的是進行編譯的第一遍掃描(語法掃描和語法分析)之前所作的工作。它由預處理程式負責完成。當對一個原始檔進行編譯時,系統自動引用預處理程式對預處理部分進行處理,處理完畢