C++知识碎片整理(4)——string,int互转

来源:互联网 发布:光碟刻录软件 编辑:程序博客网 时间:2024/05/16 15:40

C++知识碎片整理(4)——string转int
2016/8/16
string和int类型数据的互转是经常使用到的功能,自然有很多的方法。
今天只记录我相对喜欢的一个string转int方法,其他方法在下方博文中有介绍
http://www.cnblogs.com/nzbbody/p/3504199.html


示例程序

#include <iostream>#include <sstream>using namespace std;int string2int(string s){    int num;    stringstream stream;    stream << s;    stream>>num;    return num;};int main(){    string a = "100";    string b = "200";    int num1 = string2int(a);    int num2 = string2int(b);    cout << num1 << "\t"<<num2<<endl;    getchar();    return 0;}

说明

核心是stringstream的使用,stringstream是在库中定义的一种类,因此要首先引用这个库。库还定义了其他两个istringstream,ostringstream,顾名思义就是分别进行输入流,输出流和输入输出流操作的类。简单起见,直接使用stringstream(至于其他两类的存在意义,可以以后深究)。
<<和>>是stringstream输入输出的操作符,需要注意输入和赋值是不同的。因此如果你要重复使用stringstream,你要在每一次重用前clear()一下。以下例来说明这个问题

#include <iostream>#include <sstream>using namespace std;int main(){    string a = "100";    string b = "200";    cout << "a" << a << endl;    cout << "b" << b << endl;    stringstream ss;    int num1, num2;    ss << a;    ss >> num1;    cout << num1 << endl;    ss.clear();    ss << b;    ss >> num2;    cout << num2 << endl;    getchar();    return 0;}

通过上例,使用stringstream进行两次string到int的转换,因为中间使用了clear()方法,程序正确执行,但如果把clear()注释掉,在输出第二个数时就会发现出现了错误,这是因为ss里的数据没有清空就继续输入了字符串“b”的数据,出现错误,由此可见<<操作和赋值的不同。
因此,在我实际使用过程中,我习惯于像最上方示例代码中将string2int写成一个函数,甚至专门设计自己熟悉的数据类型转化方法类库,这样可以方便自己的学习和开发,提高效率和程序正确率。


2016/9/18更新

同理:int转string示例:

int aa = 30; stringstream ss; ss<<aa;  string s1 = ss.str(); cout<<s1<<endl; // 30 string s2; ss>>s2; cout<<s2<<endl; // 30

形成函数

string—->int

int string2int(string s){    int num;    stringstream stream;    stream << s;    stream >> num;    return num;}

int—–>string

string int2string(int n){    stringstream ss;    ss<<n;     string str = ss.str();    return str;}

更多

关于stringstream的用法,更多可以看:
http://www.cppblog.com/Sandywin/archive/2007/07/13/27984.html
关于sstream类库所涉及到的C++标准库的知识:
http://blog.163.com/hbu_lijian/blog/static/126129153201201710456994/

2017/2/3批注:
依然是文件输入输出流的内容,时至今日,我已经把这部分知识忘记的差不多了,标记一下,回头温习一下Java输入输出流。

补充一下这个问题的Java实现,Java实现非常简单,只需要调用包装类的valueOf方法即可

package com.way.algorithm;/** * Test the Java implementation to transform a String to an int and  * in reverse transform an int to a String * @author reus * */public class TypeExchange {    public static void main(String[] args){        String str1="1234";        int x=Integer.valueOf(str1);        System.out.println(x);        String str2=String.valueOf(x);        System.out.println(str2);    }}

结果

12341234
0 0