欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字符串与整型、浮点型数据之间的转换

程序员文章站 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;
}

运行结果:
字符串与整型、浮点型数据之间的转换

相关标签: C/C++