c++中字符与数值之间的转换函数(全网最全)
string類型與數(shù)值
1.【字符串轉(zhuǎn)換為數(shù)值】
記憶小技巧:s看成是string 類型 to是轉(zhuǎn)化 后邊的是轉(zhuǎn)化為的類型
i : int u:unsigned l:long f:float d:double
| string和數(shù)值轉(zhuǎn)換 | 轉(zhuǎn)換類型 |
| to_string(val) | 把val轉(zhuǎn)換成string |
| stoi(s,p,b) | 把字符串s從p開始轉(zhuǎn)換成b進制的int |
| stol(s,p,b) | 把字符串s從p開始轉(zhuǎn)換成b進制的long |
| stoul(s,p,b) | 把字符串s從p開始轉(zhuǎn)換成b進制的unsigned long |
| stoll(s,p,b) | 把字符串s從p開始轉(zhuǎn)換成b進制的long long |
| stoull(s,p,b) | 把字符串s從p開始轉(zhuǎn)換成b進制的unsigned long long |
| stof(s,p) | 把字符串s從p開始轉(zhuǎn)換成float |
| stod(s,p) | 把字符串s從p開始轉(zhuǎn)換成double |
| stold(s,p) | 把字符串s從p開始轉(zhuǎn)換成long double |
2.【數(shù)值轉(zhuǎn)換為字符串】
用stringstream即可把多種數(shù)值類型轉(zhuǎn)換為String類型的字符串
#include <string> #include <sstream>//需要包含該頭文件 #include <iostream> using namespace std; int main(){double a = 123.32;string res;stringstream ss;ss << a;ss >> res;//或者 res = ss.str();cout<<res; return 0; }『Char數(shù)組類型的字符串』
a:char [N] 其余與string 中的規(guī)律一樣
| atof(s) | 將字符串s[n]轉(zhuǎn)換為雙精度浮點型值。 |
| atoi(s) | 將字符串s[n]轉(zhuǎn)換為整型值。 |
| atol(s) | 將字符串s[n]轉(zhuǎn)換為長整型值。 |
| strtod(s,*p,b) | 將字符串s[n]轉(zhuǎn)換為b進制雙精度浮點型值,到p停止,并報告不能被轉(zhuǎn)換的所有剩余數(shù)字。 |
| strtol(s,*p,b) | 將字符串s[n]轉(zhuǎn)換為b進制長整值,到p停止,并報告不能被轉(zhuǎn)換的所有剩余數(shù)字。 |
| strtoul(s,*p,b) | 將字符串s[n]轉(zhuǎn)換為b進制無符號長整型值,到p停止,并報告不能被轉(zhuǎn)換的所有剩余數(shù)字。 |
sscanf()函數(shù)將字符數(shù)組轉(zhuǎn)為數(shù)字
功能:
把格式化的數(shù)據(jù)寫入某個字符串緩沖區(qū)。
頭文件
stdio.h
原型
int sprintf( char *buffer, const char *format, [ argument] … );
參數(shù)列表
buffer:char型指針,指向?qū)⒁獙懭氲淖址木彌_區(qū)。
format:格式化字符串。
[argument]…:可選參數(shù),可以是任何類型的數(shù)據(jù)。
返回值:字符串長度(strlen)
sscanf函數(shù)用法詳解:
sscanf() - 從一個字符串中讀進與指定格式相符的數(shù)據(jù).
函數(shù)原型:
Int sscanf( string str, string fmt, mixed var1, mixed var2 … );
int scanf( const char format [,argument]… );
說明:
sscanf與scanf類似,都是用于輸入的,只是后者以屏幕(stdin)為輸入源,前者以固定字符串為輸入源。
其中的format可以是一個或多個 {%[] [width] [{h | l | I64 | L}]type | ’ ’ | ‘\t’ | ‘\n’ | 非%符號}
注:
1、 * 亦可用于格式中, (即 %d 和 %s) 加了星號 () 表示跳過此數(shù)據(jù)不讀入. (也就是不把此數(shù)據(jù)讀入?yún)?shù)中)
2、{a|b|c}表示a,b,c中選一,[d],表示可以有d也可以沒有d。
3、width表示讀取寬度。
4、{h | l | I64 | L}:參數(shù)的size,通常h表示單字節(jié)size,I表示2字節(jié) size,L表示4字節(jié)size(double例外),l64表示8字節(jié)size。
5、type :這就很多了,就是%s,%d之類。
6、特別的:%[width] [{h | l | I64 | L}]type 表示滿足該條件的被過濾掉,不會向目標參數(shù)中寫入值
支持集合操作:
%[a-z] 表示匹配a到z中任意字符,貪婪性(盡可能多的匹配)
%[aB’] 匹配a、B、'中一員,貪婪性
%[^a] 匹配非a的任意字符,貪婪性
例子:
1. 常見用法。
2. 取指定長度的字符串。如在下例中,取最大長度為4字節(jié)的字符串。
sscanf("123456 ", "%4s", buf); printf("%s\n", buf); 結果為:12343. 取到指定字符為止的字符串。如在下例中,取遇到空格為止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf); printf("%s\n", buf); 結果為:1234564. 取僅包含指定字符集的字符串。如在下例中,取僅包含1到9和小寫字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf); printf("%s\n", buf); 結果為:123456abcdedf5. 取到指定字符集為止的字符串。如在下例中,取遇到大寫字母為止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf); printf("%s\n", buf); 結果為:123456abcdedf6、給定一個字符串iios/12DDWDFF@122,獲取 / 和 @ 之間的字符串,先將 "iios/"過濾掉,再將非’@'的一串內(nèi)容送到buf中
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf); printf("%s\n", buf); 結果為:12DDWDFF7、給定一個字符串““hello, world”,僅保留world。(注意:“,”之后有一空格)
sscanf(“hello, world”, "%*s%s", buf); printf("%s\n", buf); 結果為:world %*s表示第一個匹配到的%s被過濾掉,即hello被過濾了 如果沒有空格則結果為NULL。sprintf()函數(shù)將數(shù)值轉(zhuǎn)化為字符串
sprintf 是個變參函數(shù),定義如下:
int sprintf( char *buffer, const char *format [, argument] ... );詳細鏈接:
sprintf()函數(shù)
參考博文;
使用函數(shù)轉(zhuǎn)化(非sscanf())
sscanf()函數(shù)
總結
以上是生活随笔為你收集整理的c++中字符与数值之间的转换函数(全网最全)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++备考期末必看知识点(一篇就够了)
- 下一篇: qt开发游戏必须要了解的数据类