『写在前边』
因为写PAT总是遇到字符串(主要是String)和数值之间的转化,所以整理一下以便好复习。
『String类型的字符串』
这里数值和字符串相互转换的例子,使用的是stringstream函数,在c++11当中有定义好的现成的函数取调用,非常方便。
1.【字符串转换为数值】
string和数值转换 | 转换类型 |
---|---|
to_string(val) | 把val转换成string |
stoi(s,p,b) | 把字符串s从p开始转换成b进制的int |
stol(s,p,b) | 把字符串s从p开始转换成b进制的long |
stoul(s,p,b) | 把字符串s从p开始转换成b进制的unsigned long |
stoll(s,p,b) | 把字符串s从p开始转换成b进制的long long |
stoull(s,p,b) | 把字符串s从p开始转换成b进制的unsigned long long |
stof(s,p) | 把字符串s从p开始转换成float |
stod(s,p) | 把字符串s从p开始转换成double |
stold(s,p) | l把字符串s从p开始转换成long double |
#include <bits/stdc++.h>
#include <map>
using namespace std;
int main(){string s="222.22";cout<<"s="<<s<<endl;int a = 222;int ot = stoi(s,0,10);int ol = stol(s,0,10);float of = stof(s,0);double od = stod(s,0); cout<<"ot="<<ot<<endl;cout<<"ol="<<ol<<endl;cout<<"of="<<of<<endl;cout<<"od="<<od<<endl;return 0;
}
2.【数值转换为字符串】
用stringstream即可把多种数值类型转换为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数组类型的字符串』
这里是使用C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字和字符串相互转换。
字符串和数值转换 | 作用 |
---|---|
atof(s) | 将字符串s[n]转换为双精度浮点型值。 |
atoi(s) | 将字符串s[n]转换为整型值。 |
atol(s) | 将字符串s[n]转换为长整型值。 |
strtod(s,*p,b) | 将字符串s[n]转换为b进制双精度浮点型值,到p停止,并报告不能被转换的所有剩余数字。 |
strtol(s,*p,b) | 将字符串s[n]转换为b进制长整值,到p停止,并报告不能被转换的所有剩余数字。 |
strtoul(s,*p,b) | 将字符串s[n]转换为b进制无符号长整型值,到p停止,并报告不能被转换的所有剩余数字。 |
#include <cctype>
#include <cstdio>
#include <cstdlib>
int main(void ) {char s[100]="1431";printf("The number integer is %d\n",atoi(s));return 0;
}
#include <cstdlib>
#include <cstdio>
main() {double a=123.45;double b=-1234.56;char ptr[50];gcvt(a,5,ptr);printf("a value=%s\n",ptr);gcvt(b,6,ptr);printf("b value=%s\n",ptr);
}