C/C++学习笔记

字符数字和数字之间的相互转换

2020-02-23  本文已影响0人  零岁的我

以字符串形式存储的数字和以数字形式存储的数字之间是有区别的。

例如,字符串 "2679" 就不是一个数字:它是由 2、6、7、9 这 4 个字符的 ASCII 码组成的序列。由于字符串 "2679" 不是一个数字,所以编译器将不允许对它进行加法、乘法和除法之类的数学运算。以数字表示的字符串必须首先转换为数字形式,然后才能与算术运算符一起使用。
当用户在键盘上输入一个数字时,该数字以字符串的形式输入,就好像用户输入的一系列字符(数字)。在 C++ 中,这样的数字通常通过流提取运算符 >> 来读取。在存储到数字类型的变量之前,该运算符会根据需要自动执行转换。在输出期间,数字到字符串的反向转换由流输出运算符 << 执行。


方法总结都放在如下程序注释中了。

#include<iostream>
#include<typeinfo>
#include<sstream>
#include<string>
using namespace std;


int main(int argc,char **argv)
{
//一、数字字符转数字
/*
1)使用字符串对象istringstream:
istringstream 类是从 istream 派生的。它内部包含一个字符串对象,
函数将它作为可以从中"读取"的输入流。
流提取操作符 >> 从封闭的字符串中读取,并在必要时将字符串转换为数字。
*/
    string str1="123";
    cout<<str1<<" "<<typeid(str1).name()<<endl;
    istringstream istr1(str1);

    int i1;
    istr1>>i1;  //将字符数字转换为数字
    cout<<i1<<" "<<typeid(i1).name()<<endl;
/*
2)使用stoX() 系列函数
int stoi(const strings str, size_t* pos = 0, int base = 10)
long stol(const strings str, size_t* pos = 0, int base = 10)
float stof(const strings str, size_t* pos = 0)
double stod(const strings str, size_t* pos = 0)
这些函数可以将 str 可能的最长前缀转换为数字,
并返回一个整数地址pos,pos中保存了str无法被转换的第一个字符的索引。
*/
    int i2=stoi(str1);
    cout<<i2<<" "<<typeid(i2).name()<<endl;
    string str="-342.007 is a double";
    size_t pos;//size_t是在标准库中定义的,常用于表示无符号整数的大小或数组、矢量、字符串中的一个索引
    double d=stod(str,&pos);
    cout<<"The string is:"<<str<<endl;
    cout << "The converted double is " << d << endl;
    cout << "The stopping character is " << str[pos] << " at position " << pos << endl;
/*
3)单个字符转数字,直接用字符减去'0',也就是减去字符0对应的ascii
适用于一位的字符数字转换
*/
    string str2="1";
    cout<<str2<<" "<<typeid(str2).name()<<endl;
    int i3=str2[0]-'0';
    cout<<i3<<" "<<typeid(i3).name()<<endl;

//二、数字转字符
/*
1)使用to_string()函数
*/
    int i=234;
    string str3=to_string(i); //to_string()C++11标准支持
    cout<<str3<<" "<<typeid(str3).name()<<endl;
    long j=345;
    string str4=to_string(i);
    cout<<str4<<" "<<typeid(str4).name()<<endl;
/*
2)一位的数字直接加'0',也就是加0的ascii,可以将该数字直接转换为字符型
*/
    string str5;
    str5=2+'0';
    cout<<str5<<" "<<typeid(str5).name()<<endl;
    return 0;
}

程序运行结果

字符数字转数字值在运用字符串解决大数相加减的问题中尤为重要。


参考链接:http://c.biancheng.net/view/1527.html

欢迎点赞!

上一篇下一篇

猜你喜欢

热点阅读