網(wǎng)站首頁 編程語言 正文
字符串轉整數(shù)
字符串轉換為整數(shù)的函數(shù)有兩個,他們的函數(shù)原型如下:
int __cdecl atoi(const char *_Str); long __cdecl atol(const char *_Str);
這兩個函數(shù)的用法都很簡單,atoi函數(shù)將字符串轉換為整數(shù)int
型,atol函數(shù)將字符串轉換為長整形long int
型。如果轉換無效,返回值都為0,下面通過一個簡單的例子看一下這兩個函數(shù)的用法。
#include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int val; long val_l; char str[20]; strcpy(str, "1234"); val = atoi(str); printf("字符串值 = %s, 整型值 = %d\n", str, val); strcpy(str, "abc"); val = atoi(str); printf("字符串值 = %s, 整型值 = %d\n", str, val); strcpy(str, "98993489"); val_l = atol(str); printf("\n字符串值 = %s, 長整型值 = %ld\n", str, val_l); strcpy(str, "abc123"); val_l = atol(str); printf("字符串值 = %s, 長整型值 = %ld\n", str, val_l); return 0; }
給字符串賦不同的值,然后使用,atoi函數(shù)和atol函數(shù)對字符串進行轉換,輸出結果如下:
通過結果可以看出,只有當字符串有效時才能正確的轉換成整數(shù),否則轉換的結果就為0。
將字符串轉換為整數(shù)的函數(shù)還有以下兩個:
long __cdecl strtol(const char * __restrict__ _Str,char ** __restrict__ _EndPtr,int _Radix); unsigned long __cdecl strtoul(const char * __restrict__ _Str,char ** __restrict__ _EndPtr,int _Radix);
strtol()?函數(shù)用來將字符串轉換為長整型數(shù)(long
),它有三個參數(shù):
-
_Str
?為要轉換的字符串, -
_EndPtr
?為第一個不能轉換的字符的指針, -
_Radix
?為字符串 str 所采用的進制。
trtol()?函數(shù)會將參數(shù)str
字符串根據(jù)參數(shù)base
來轉換成長整型數(shù)(long
)。參數(shù)base
范圍從2
至36
,或0
。參數(shù)base
代表str
采用的進制方式,如base
值為10
則采用10
進制,若base
值為16
則采用16
進制等。
下面通過一個簡單的例子演示一下strtol()?函數(shù)的用法。
#include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { char str[30] = "123 -456 abc"; char *pEnd; long ret1,ret2; ret1 = strtol(str, &pEnd, 10); ret2 = strtol(pEnd, &pEnd, 10); printf("數(shù)字1是: %ld\n", ret1); printf("數(shù)字2是: %ld\n", ret2); printf("字符串部分是: %s \n", pEnd); return 0; }
定義一個字符串,然后使用strtol()?函數(shù)轉換字符串中的數(shù)字,輸出結果如下:
通過打印的結果可以看出,strtol()?函數(shù)將字符串中的兩個數(shù)字都成功換成為整數(shù)了。
當strtol()?函數(shù)讀取字符串時,讀取到第一個空格是,由于空白字符不能轉換,所以函數(shù)返回,并將空白字符的存儲在?pEnd
中,接下來從空白位置繼續(xù)轉換,將字符串“-456”
轉換為數(shù)字之后,又遇到了空白字符,不能繼續(xù)轉換,函數(shù)退出,將第二個空白字符存儲在?pEnd
中,最后將剩余的字符串換打印出來。
通過strtol()?函數(shù)就可以智能的將字符串的數(shù)字提取出來。
strtoul?函數(shù)用來將字符串轉換成無符號長整型數(shù)(unsigned long
),它的用法和strtol()?函數(shù)基本一樣。
修改上面的代碼如下:
#include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { char str[30] = "123 456 abc"; char *pEnd; long ret1,ret2; ret1 = strtoul(str, &pEnd, 10); ret2 = strtoul(pEnd, &pEnd, 10); printf("數(shù)字1是: %lu\n", ret1); printf("數(shù)字2是: %lu\n", ret2); printf("字符串部分是: %s \n", pEnd); return 0; }
輸出結果為:
如果在字符串的數(shù)字前面添加上負號,轉換的結果就會出錯。
在使用strtol()?函數(shù)和strtoul?函數(shù)時要注意兩點:
- 當?
base
?的值為?0
?時,默認采用?10
?進制轉換,但如果遇到'0x' / '0X'
前置字符則會使用?16
?進制轉換,遇到?'0'
?前置字符則會使用?8
?進制轉換。 - 若?
endptr
?不為NULL
,則會將遇到的不符合條件而終止的字符指針由?endptr
?傳回;若?endptr
?為?NULL
,則表示該參數(shù)無效,或不使用該參數(shù)。
總結
原文鏈接:https://hxydj.blog.csdn.net/article/details/122962031
相關推薦
- 2022-10-02 C#使用is、as關鍵字以及顯式強轉實現(xiàn)引用類型轉換_C#教程
- 2022-12-14 Qt設置窗體(QWidget)透明度的方法總結_C 語言
- 2022-04-11 利用Python操作excel表格的完美指南_python
- 2022-11-19 Gogs遷移
- 2022-09-07 GoLang使goroutine停止的五種方法實例_Golang
- 2022-10-27 python使用pika庫調用rabbitmq參數(shù)使用詳情_python
- 2023-05-24 Pytorch中retain_graph的坑及解決_python
- 2022-09-12 .Net6集成IdentityServer4?+AspNetCore?Identity讀取數(shù)據(jù)表用戶
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支