C語言字符篇(一)字符串轉換函數


 
#include <stdlib.h>  
double atof(const char *nptr); 
將字符串轉換成雙精度浮點數
int atoi(const char *nptr); 
將字符串轉換成整形數
long atol(const char *nptr); 將字符串轉換成長整型數
double strtod(const char *nptr, char **endptr);            
將字符串轉換成雙精度浮點數
long int strtol(const char *nptr, char **endptr, int base); 將字符串轉換成長整型數
unsigned long int strtoul(const char *nptr, char **endptr, int base); 將字符串轉換成無符號長整型數
char *gcvt(double number, int ndigit, char *buf); 將浮點數轉換成字符串,取四舍五入

 

api介紹(學習方法)如何看懂一個api
 
double atof(const char *nptr);  將字符串轉換成雙精度浮點數
看函數,
首先看參數  const char *nptr,根據之前學習的基礎,首先看到這是一個指針,而且有const char,代表這是一個字符串指針 .
所以要得到兩點結論:
1. 傳進來的參數是一個指針,字符串的指針
2. 傳進來的參數是受const保護的,也就是說,在這個函數里面,它的內容將不會發生修改 .進函數前是什么樣子,    函數結束后還是什么樣子.
然后再看返回值 double
說明在調用這個函數的時候,我們需要聲明一個變量得是double 類型的來接收這個函數反回的值.

 

atoi atof atol 這三個函數的參數是字符型指針常量,返回值 為 數值字符串 轉化后的數值.

 

int atoi(const char *nptr); 
-------------------------------------------------------
            int main(void) {
 

                const char *buf="365.3day";
                int day;
                day = atoi(buf);
                printf("%d\n",day); //365
 

            }
-------------------------------------------------------
View Code

 

double strtod(const char *nptr, char **endptr);
-------------------------------------------------------
 

            int main(int argc, char **argv) {
                const char *buf="456.78秒";
                double sec;
                //因為要接收一個字符串指針,所以就定義一個字符串指針
                char *p;
 

                //因為參數傳遞是拷貝的概念,值傳遞只是拷貝副本,並不影響本身,所以把參數當做修改入口的話,要取它的地址傳遞
                //指針變量p 的地址是 &p; 跟普通變量 a 的地址 &a是一樣的.
                //而且p是指針,函數strtod 的形參剛好也是要求的char **p;和實參設計不謀而合 .
                sec = strtod(buf,&p);
                printf("sec is %0.2f\n",sec);   //sec is 456.78
                printf("left str is: %s\n",p);  //left str is: 秒
 

            }
 

-------------------------------------------------------
View Code
所以這個函數的功能就是將字符串數字開頭的部分通過返回值返回,然后將剩下的非數字部分的指針賦給指針*p,這樣*p就指向非數字部分,可以輸出.

 

long int strtol(const char *nptr, char **endptr, int base);             將字符串轉換成長整型數:
unsigned long int strtoul(const char *nptr, char **endptr, int base);   將字符串轉換成無符號長整型數:
//參數 int base是規定轉換數字的進制數
int main(int argc, char **argv) {
 

    const char *buf="1234567sec";
 

    long int sec;   //用於接收返回值
    char *tmp;      //指向剩下字符串指針
    int base = 10;  //10進制
 

    sec=strtol(buf,&tmp,base);
 

    printf("sec is: %ld\n",sec);    //1234567
    printf("left src is: %s\n",tmp);    //left src is: sec
 

    return 0;
}
 

-------------------------------------------------------
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM