字符串与整型、浮点型数据之间的转换
程序员文章站
2024-03-08 08:27:34
...
字符串与整型、浮点型数据之间的转换
最近遇到的一道题。其中用到了将字符串转化为float类型,在很多题中都可能要求输入数据,但考虑到可能存在输入异常,不能直接利用整型或浮点型存储,第一步都是先使用字符串或者字符型数组,将符号和数字统一看作字符进行存储。引例如下:
PAT 1054(求平均值)
题解
题目核心是要判断输入是否合法。当前字符不是数字不是小数点也不是符号时,直接非法;负号出现在非首位非法;小数点数目大于1非法;小数位数大于2非法;转化后的浮点数不在区间[-1000,1000]内非法。除此之外,合法。
在上题的输入示例1中,如果直接将数据输入进float
型变量中,那么aaa
就无法判别异常,但如果使用字符型存储,对于合法数据,参加运算时还要作为浮点型数据进行求取平均值,因此需要利用到stod()
函数进行类型转换。
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
bool check_legal(string s) {
int pnum = 0, ppos;
for (int i = 0; i < s.size(); ++i) {
if ((s[i] < '0' || s[i] > '9') && (s[i] != '.' && s[i] != '-'))
return false;
if (s[i] == '-' && i != 0) return false;
if (s[i] == '.') {
pnum++;
if (pnum > 1) return false;
ppos = i;
}
}
if (pnum > 0 && ppos < s.size() - 3) return false;
if (stod(s) > 1000.0 || stod(s) < -1000.0)
return false;
else
return true;
}
int main() {
int n, cnt = 0;
double sum = 0.0;
string s;
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
cin >> s;
if (!check_legal(s))
cout << "ERROR: " << s << " is not a legal number" << endl;
else {
cnt++;
sum += stod(s);
}
}
if (cnt == 0)
printf("The average of 0 numbers is Undefined");
else if (cnt == 1)
printf("The average of %d number is %.2lf", cnt, sum);
else
printf("The average of %d numbers is %.2lf", cnt, sum / cnt);
return 0;
}
类型转换函数
字符串转化为其他类型
函数名 | 含义 |
---|---|
stoi | string to int |
stod | string to double |
stof | string to float |
stol | string to long |
stold | string to long double |
stoll | string to long long |
注:
【1】
【2】stoi()
等函数属于C++11中的特性,在Devc++中要使用这类函数,需要先修改编译标准,步骤如下。
示例:
#include<iostream>
using namespace std;
int main(){
string s = "2020.525";
int a = stoi(s);
double b = stod(s);
float c = stof(s);
int d = a + 1;
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
cout<<d<<endl;
return 0;
}
运行结果:
其他类型转化为字符串
函数原型:
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
功能:
将数值转化为字符串。返回对应的字符串。
示例:
#include <iostream>
#include <string>
using namespace std;
int main(){
string pi = "pi is " + std::to_string(3.1415926);
string perfect = to_string(1 + 2 + 4 + 7 + 14) + " is a perfect number";
cout << pi << '\n';
cout << perfect << '\n';
return 0;
}
运行结果:
上一篇: php实现购物车产品删除功能(2)
下一篇: 1549:最大数